我看到可以在web worker中执行ajax请求,但是我想通过jQuery(当然是在worker之外)进行ajax调用,然后将回调的结果传递给工人。 我做了一些测试,这有效,但我想知道它是否有问题(内存泄漏,不兼容,不稳定):
$.ajax
({
type: 'GET',
url : 'http://192.168.0.2/json.php',
data: requestDataObj,
dataType: 'json'
}).success(function(jsonResult)
{
var jSonWorker = new Worker('http://localhost/webmail/responsive/js/workers.js');
jSonWorker.postMessage(jsonResult);
jSonWorker.onmessage = function(event)
{
alert(event.data)
}
});
正如你所看到的,我将jsonResult传递给worker,在那里我用它做了一些事情并将消息发送回主线程。这有什么不对吗?
答案 0 :(得分:1)
我看到的唯一问题是您假设任何浏览器都支持window.Worker
,但实际情况并非如此。
如果阻止应用程序是可行的 - 比如你希望工作人员做的计算很轻松 - 你可以粘贴工作者在ajax回调中的整个代码[1]
因此
...success(function (res) {
if (window.Worker) {
var worker = new Worker(...);
worker.onmessage = function (e) { /* ... */ };
worker.postMessage(res);
}
else {
// Write here the same code the worker
// is supposed to execute "on" res.
}
});
当然,您将失去使用两个主题获得的性能提升。
[1]由@afshinm完成here。