我以前问过这个问题,并在网上找到了一些关于这个主题的文章,但我一生都无法弄清楚这一点。我有一组计算模型的 Javascript 函数,但是存在大量循环,导致脚本需要一段时间(约 4 秒)。我不介意处理时间,但 IE 会提示警告,因为执行次数太多。
我尝试过优化我的代码,但我根本无法减少执行次数以绕过 IE 警告。因此,我认为我必须使用setTimeout函数来重置IE中的计数器。
代码很长,我只是不知道如何在 IE 中正确实现 setTimeout 。我尝试模仿找到的代码here http://www.picnet.com.au/blogs/Guido/post/2010/03/04/How-to-prevent-Stop-running-this-script-message-in-browsers.aspx,但由于某种原因,它在第 100 次迭代后最终崩溃了。
我不知道这是否常见,但是如果我将代码发送给他们,有人介意看一下吗?我只是不想把它贴在这里,因为它太长了。
Thanks!
EDIT:正如一些人建议的那样,我已将代码放在 JSfiddle 上。你可以找到它here http://jsfiddle.net/jrenfree/cPDEX/1/。感谢您的建议,如有任何问题请告诉我!
我使用的基本方法是将工作分成批次。每个批次都在一个“纪元”内完成,并且在该批次完成时,它调用 setTimeout() 来开始下一个纪元。
假设您要运行 1000 次迭代;您可以将其分成 100 个批次。
function doTheWork(operation, cycles, callback) {
var self = this, // in case you need it
cyclesComplete = 0,
batchSize = 100;
var doOneBatch = function() {
var c = 0;
while(cyclesComplete < cycles) {
operation();
c++;
if(c >= batchSize) {
// may need to store interim results here
break;
}
cyclesComplete++;
}
if (cyclesComplete < cycles) {
setTimeout(doOneBatch, 1);
}
else {
callback(); // maybe pass results here
}
};
// kickoff
doOneBatch();
return null;
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)