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

use*_*314 7 javascript eval execution abort time-limiting

情况是:

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

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

这个奇怪的问题还有其他解决方案吗?也许eval可以给代码的一些解析树或类似的东西?

asg*_*oth 5

可能的解决方案是使用Web Workers.Web工作程序在单独的线程中启动,可以终止.

var worker = new Worker('my_task.js');
...
worker.terminate();
Run Code Online (Sandbox Code Playgroud)

缺点是并非所有浏览器都支持 Web Workers.


Jam*_*son 1

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

在浏览器中,您可以将代码放在 0 秒内setTimeout以释放运行循环(并暂时解锁浏览器)

setTimeout(function() {
   // your code here
}, 0)
Run Code Online (Sandbox Code Playgroud)

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

process.nextTick(function() {
   // frees up the run loop even faster
});
Run Code Online (Sandbox Code Playgroud)