У меня была та же проблема, которая возникала, когда пользователь последовательно обновлял страницу. Причиной были две вложенные петли, которые происходили более 52000 раз. Эта проблема была более острой в Firefox 24, чем в Chrome 29, поскольку Firefox зависал раньше (примерно на 2000 мс раньше, чем Chrome). Я просто сделал, и это сработало, так как я использовал циклы «для» вместо каждого, а затем я реорганизовал код так, чтобы разделить весь массив циклов на 4 отдельных вызова, а затем объединить результат в один. Это решение доказало, что оно сработало.
Примерно так:
var entittiesToLoop = ["..."]; // Mainly a big array
loopForSubset(0, firstInterval);
loopForSubset(firstInterval, secondInterval);
...
var loopForSubset = function (startIndex, endIndex) {
for (var i=startIndex; i < endIndex; i++) {
//Do your stuff as usual here
}
}
Другое решение, которое также работало для меня, было тем же решением, реализованным с Worker APIs
из HTML5. Используйте ту же концепцию в рабочих, поскольку они избегают зависания вашего браузера, потому что они работают в фоновом режиме вашего основного потока. Если только применение этого с Workers API не сработало, поместите каждый из экземпляров loopForSubset
в разных работников и объедините результат в основной вызывающей программе Worker.
Я имею в виду, что это может быть не идеально, но это сработало. Я могу помочь с более реальными кусками кода, если кто-то все еще думает, что это может подойти им.