iOS Javascript 工人高 CPU 终止后()
iOS Javascript Workers High CPU after terminate()
我有一个复杂的 javascript 函数,它可能需要 1 秒或很多分钟来发送答案。所以我创建了一个正在工作的 Worker,我在 Swift (stringByEvaluatingJavaScriptFromString) 中从我的 UIWebView 调用这个函数。我只等了 5 秒(在同一个 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(并确定它)的最简单方法是注入一个布尔表达式,使代码进入其主循环的 "exception out"(或者甚至 return 优雅地,如果代码中只有 1 或 2 个瓶颈。)。并且您可以在让它自然退出之前在 catch 块中执行任何需要的清理。
我个人讨厌用终止或终止等函数结束线程,因为它会使事情处于未定义状态
对终止的调用可能会被忽略或排队等候,因为工作人员正在使用它可以使用的所有资源,没有时间处理消息。
我有一个复杂的 javascript 函数,它可能需要 1 秒或很多分钟来发送答案。所以我创建了一个正在工作的 Worker,我在 Swift (stringByEvaluatingJavaScriptFromString) 中从我的 UIWebView 调用这个函数。我只等了 5 秒(在同一个 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(并确定它)的最简单方法是注入一个布尔表达式,使代码进入其主循环的 "exception out"(或者甚至 return 优雅地,如果代码中只有 1 或 2 个瓶颈。)。并且您可以在让它自然退出之前在 catch 块中执行任何需要的清理。
我个人讨厌用终止或终止等函数结束线程,因为它会使事情处于未定义状态
对终止的调用可能会被忽略或排队等候,因为工作人员正在使用它可以使用的所有资源,没有时间处理消息。