JavaScript « как избавиться от зависания браузера при выполнении javascript`a?
Браузер висит.
Хочется, чтобы не висел)) и показывал прогресс бар выполнения цикла.
Как избавиться от зависания браузера при больших вычислениях на javascript?
Решение проблемы интересует в firefox`e
1 ответов
Яваскрипт движок любого браузера не имеет каких-либо ограничений на использование ресурсов.
Соотвественно, вам прийдется самим как-то оптимизировать процессы выполнения таким образом, что бы разгрузить операции.
Спростите, как? Ну вобщем, хоть яваскрипт и однопотоковый язык, тем не менее есть возможность запускать, тем самым ускорять процесс выполнения за счет запуска нескеольких потоков с помощью setTimeout
К примеру - у нас есть SomeHugeDataArrayOrSmthngBigFat
var myData = SomeHugeDataArrayOrSmthngBigFat;
// Да, детка, я большой долбанный массив!
var length = myData.length;
var index = 0;
var process = function() {
for (; index < length; index++) {
var toProcess = myData[index];
// Че-нить делаем тут
if (index + 1 < length && index % 100 == 0) {
setTimeout(process, 5);
}
}
};
process();
Данная операция несколько ускоряет разбор большого количетсва данных в разы примерно равные количеству запущенных процессов с помощью sertTimeOut.
Примерно так.
Надеюсь, помогло.
Достаточно универсальное решение проблемы обработки больших массивов: http://w3pro.ru/article/obrabotka-bolshikh-obemov-dannykh-v-javascript - программистом задается функция, которая применяется к каждому элементу массива, максимальное время выполнения обработки порции массива и задержка между обработками.