如何限制javascript中函数的执行时间

How to limit the execution time of a function in javascript?

本文关键字:执行时间 函数 何限制 javascript      更新时间:2023-09-26

情况是:

用户写了一些js代码,它应该在一些数据(本地)上运行。

但有时有无尽的循环或递归调用…这就是为什么我需要限制函数的执行时间,而不是编辑函数本身(即使是这样-我应该在每个序列点后插入检查吗?但是递归调用呢?)

对于这个奇怪的问题还有其他的解决办法吗?也许eval可以给出一些代码的解析树之类的?

一个可能的解决方案是使用Web Workers。web worker在一个单独的线程中启动,并且可以被终止。

var worker = new Worker('my_task.js');
...
worker.terminate();

缺点是不是所有的浏览器都支持Web Workers。

这是在浏览器中还是在节点中?

在浏览器中,你可以把你的代码放在一个0秒的setTimeout中,以释放运行循环(并暂时解除浏览器阻塞)

setTimeout(function() {
   // your code here
}, 0)

节点有一些更漂亮的东西,看起来像这样,并且稍微好一点:

process.nextTick(function() {
   // frees up the run loop even faster
});