之前我曾经问过这个问题,并且在网上找到了一些关于这个主题的文章,但对于我的生活,我无法弄清楚这一点。我有一组计算模型的Javascript函数,但是有大量的循环使脚本需要一段时间(~4秒)。我不介意处理时间,但IE提示警告,因为有太多的执行。
我已经尝试优化我的代码,但我根本无法减少足以绕过IE警告的执行次数。因此,我认为我必须使用setTimeout函数来重置IE中的计数器。
代码很长,我无法弄清楚如何在IE中正确实现setTimeout。我尝试过模仿here找到的代码,但由于某种原因,它在第100次迭代后最终崩溃。
我不知道这是否很常见,但如果我发送给他们,有人会介意看一下代码吗?我只是不想在这里发布它,因为它非常冗长。
谢谢!
编辑:我已将我的代码放在JSfiddle上,正如一些人所建议的那样。你可以找到它here。感谢您的建议,如果有任何问题请与我联系!
答案 0 :(得分:6)
我使用的基本方法是将工作分成批次。每批都在一个“纪元”中完成,在批处理完成时,它调用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;
};