【发布时间】:2017-12-27 13:40:58
【问题描述】:
以这个函数为例:
function mySlowFunction(baseNumber) {
console.time('mySlowFunction');
var result = 0;
for (var i = Math.pow(baseNumber, 10); i >= 0; i--) {
result += Math.atan(i) * Math.tan(i);
};
console.timeEnd('mySlowFunction');
return result;
}
这是一个占用大量 CPU 资源的函数。 mySlowFunction(5) 大约需要 3 秒才能完成。
现在考虑这段代码:
setInterval(() => console.log("interval"), 1000);
mySlowFunction(5);
我希望它每秒记录一次“间隔”,但我知道由于 mySlowFunction 在线程上运行并且 JS 是单线程的,所以 setInterval 的回调仅在 mySlowFunction 完成后执行。
有什么方法可以确保在指定的时间间隔内调用回调?我希望在基于浏览器的环境中使用它。
【问题讨论】:
-
你根本不应该在几秒钟内用任何东西阻塞主线程。如果您有一些密集的计算要做,请将它们放入 web worker 中或使用
setTimeout将它们分解为可中断的块。 -
我不相信你可以确定这一点,正是因为你所说的原因:JS 是单线程的。我认为没有办法解决这个问题。
标签: javascript