Зависание браузера при выполнении JavaScript


На заметку, оставлю небольшое решение проблемы зависания браузера или возникновение ошибки по таймауту при большом цикле или при сортировке данных функцией sort() в JavaScript.

Иногда бывает нужно обработать большой объем данных в браузере с помощью JavaScript или отсортировать большой массив. Но при этом браузер не выдерживает и зависает или выдает ошибку что было остановлено выполнение функции по таймауту.

Существует простое решение этой проблемы, которое помогает немного обмануть браузер, чтоб он "думал", что все хорошо и данные обрабатываются.

Для этого в теле цикла достаточно разместить следующий код:

if(outs > 4000){
outs = 0;
setTimeout(doWork, 1);
}
outs++;

где doWork – это пустая функция:

 function doWork(){}

С помощью такой манипуляции мы приостанавливаем выполнение основной функции и вызываем пустую doWork с задержкой в 1 мс. Этого достаточно, чтоб браузер не вылетал по таймауту и продолжал выполнение большого цикла.
Ну о недостатках писать думаю не стоит, они и так ясны.

1 Star2 Stars3 Stars4 Stars5 Stars (голосов 1, в среднем: 5.00 из 5)
Loading ... Loading ...


  1. #1 Dimmduh - Май 23rd, 2010 at 12:54

    Спасибо!
    Попробовал, не работает (firefox 3.6)
    цикл – 1 млн. итераций.
    Есть еще какие-то решения?

    //старт моделирования
    while( cur_time 4000){
    outs = 0;
    setTimeout(doWork, 1);
    }
    outs++;
    }

(will not be published)

Spam Protection by WP-SpamFree Plugin

  1. No trackbacks.