Нет, вы не можете рассчитать это, оно слишком сильно варьируется от браузера к браузеру. Некоторые браузеры делают это по времени (например, ваш код выполнялся более X секунд, не возвращаясь в браузер; в Firefox 7 значение по умолчанию составляет 10 секунд, но пользователь может изменить его ), другие браузеры делают это это по количеству операций ( IE, например ).
Лучше всего рефакторинг вашего кода, чтобы вы даже не начали приближаться к пределу. Если у вас есть большой кусок работы, разбейте его на куски, а затем запускайте куски один за другим, используя setTimeout
со значением времени ожидания 0
. Это возвращает браузеру (в течение более 0
миллисекунд; сколько именно будет зависеть от браузера и от того, что происходит на странице).
Вот пример подсчета до 10 000 000 в 100 000 итерационных блоков:
function toAMillion() {
var counter = 0,
limit = 10000000,
chunk = 100000;
doAChunk();
function doAChunk() {
var target = Math.min(limit, counter + chunk);
while (counter < target) {
++counter;
}
if (counter < limit) {
// Schedule next chunk
setTimeout(doAChunk, 0);
}
else {
// Done
display("Done, counter = " + counter);
}
}
}
Живая копия