考虑通过setTimeout
/ setInterval
定期执行后台任务的应用程序。一个函数调用应该做的理想工作量是多少?
示例:
myTask = function() {
for (var i=0; i<chunkSize; i++) { ...work... }
}
setInterval(myTask, period);
如果增加chunkSize
(并且每次调用执行更多迭代),当然它会运行更长时间。这意味着,period
也必须增加,你可以减少调用该函数的频率。但我发现,块越大,工作就越多。这可能是由setTimeout
/ setInterval
权衡是:更大的块大小使应用程序的反应性降低。这不仅涉及用户交互,还涉及其他间隔。因为只要函数运行其迭代,就不会触发其他间隔。因此,大块大小使得其他间隔不准确,或者(在最坏的情况下)在某些浏览器中完全禁用它们,因此它们不再被调用。
如果你想
实现这一目标的最佳方法是什么?你如何确定一个好的chunkSize?或者我应该监控循环中的执行时间并在一段时间后中止?或其他什么?
(顺便说一句,这是关于普通的旧JavaScript,而不是HTML5 WebWorkers)
答案 0 :(得分:2)
如果可以,您应该使用setTimeout
代替setInterval
。 setInterval
将在period
之后调用该函数,无论上一个间隔中的函数是否完成。使用setTimeout
,您可以在再次调用之前确保该函数已完成。
(function myTask() {
for (var i=0; i<chunkSize; i++) { ...work... }
setTimeout( myTask, period );
})();