Почему останавливается выполнение JavaScript

Bitman
На сайте с 05.07.2009
Offline
112
871

Построенный на рекурсивно вызываемых функциях JavaScript , много расчитывает, делает кучу преобразований с DOM элементами. В зависимости от объёма исходных данных иногда, приблизительно через 4 минуты в FireFox-е (если этот показатель что то значит? хз), останавливает свою работу. Есть ли способ излечиться от такого недуга?

Северный лес (https://euro-vagonka.by) DREW (https://drew.by) AvtoDrive (https://avtodrive.by)
[Удален]
#1

тика пример в студию!

в ФФ есть такой прикол с ДОМ... если усердно его изменять, то он перестанет перерисовываться на экране.

а еще рекурсия часто приводит к переполнению памяти.

вобщем, давайте пациента )

T.R.O.N
На сайте с 18.05.2004
Offline
314
#2
Bitman:
Построенный на рекурсивно вызываемых функциях JavaScript ...... 4 минуты

Скорее всего просто не хватило памяти.... Вообще-то так насиловать JS не стоит. Он не создан для такого

От воздержания пока никто не умер. Хотя никто и не родился! Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript (Richard Cornford)
Bitman
На сайте с 05.07.2009
Offline
112
#3

Основная функция которая запускается по событию в N-экземлярах

function Gogo(fword,furl,fimax,fjmax,fi,fj,n) 

{
if(fj<fjmax)
{
fi++
$("#counter").html("Анализ "+fi);
$.get("data.php", {s: fi, w: fword[fj], u: furl},
function(outcome)
{
if(outcome=="0"&&fi<fimax){Gogo(fword,furl,fimax,fjmax,fi,fj,n);}
if(outcome!="0"&&fi<fimax){$("#"+"pz"+n+(fj+1)+"").html(" "+outcome+" ");fi=0;fj++;Gogo(fword,furl,fimax,fjmax,fi,fj,n);}
if(fi>=fimax){$("#"+"pz"+n+(fj+1)+"").html("no");fi=0;fj++;}
});
}
else
{$("#rcounter").html("Анализ"+furl+" окончен. Поток "+n);}
}

Остановку выполнения можно обнарудить как визуально, так и через анализатор http (обращения GET на data.php).

T.R.O.N
На сайте с 18.05.2004
Offline
314
#4

Bitman, Вы бы сразу сказали, что используете гквери... Он воще такое не потянет. Хреновая это штука.

И еще, сколько запросов исполняется перед остановкой?

Bitman
На сайте с 05.07.2009
Offline
112
#5

Приблизительно 500 запросов

T.R.O.N
На сайте с 18.05.2004
Offline
314
#6
Bitman:
Приблизительно 500 запросов

пипец. Вы посмотрите в процессах сколько лиса памяти съела. Ну нельзя такие эксперименты ставить на JS. Для этого есть другие средства.

Bitman
На сайте с 05.07.2009
Offline
112
#7

Остановился на 650 запросе, памяти съело 170 мегабайт.

Bitman добавил 25.01.2010 в 15:58

Решилась проблема. Затык был в логике скрипта- убивались потоки по условию.

Кстати, провёл эксперимент, почти пошёл дым и то это из-за DOM извращений. Сделал 10000 запросов, потребление памяти не значительное.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий