iOS的JavaScript工人高端CPU后终止()

我有一个复杂的JavaScript函数可能需要1秒,或许多分钟发送答案。 所以我创build了一个正在工作的Worker,我从Swift中的UIWebView调用了这个函数(stringByEvaluatingJavaScriptFromString)。 我只等了5秒钟(超时创build在同一个Javascript),之后,我终止工人(job.terminate()),我开始一个不同的其他参数(简单),只需要1秒答案。 事情是,即使在终止信号之后,第一个工人似乎仍在后台运行。 正如你可以在图像中看到的,WebCore:Worker有很多CPU使用率。 我怎样才能终止工人?

在这里输入图像说明

job = new Worker("main.js"); var t = setTimeout(function(){ stop(); logNode.innerText = 'NULL'; },5000); function stop() { job.terminate(); job = undefined; } 

(main.js):

 importScripts('dist/algorithm.js'); var lp; self.addEventListener('message', function(e) { ... ... 

终止worker的最简单的方法就是注入一个布尔expression式来引起代码“主要循环的exception”(如果代码中只有1或2个瓶颈,甚至可以优雅地返回) )。 你可以在catch块中执行任何需要的清理,然后让它自然退出。

我个人憎恨用终止或杀死函数结束线程,因为它可以使事情处于未定义的状态

终止的调用可能会被忽略或入队,因为工作人员正在使用所有资源,可以毫不费力地处理消息。