在Ajax回调中创建Web Workers
Web Workers creation inside Ajax callback
我看到可以在web worker中做ajax请求,但我想通过jQuery(外部worker,当然)进行ajax调用,然后将回调结果传递给worker。我做了一些测试,这是有效的,但我想知道它是否有问题(内存泄漏,不兼容,不稳定):
$.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,在那里我对它做了一些事情并将消息发回主线程。这有什么问题吗?
我看到的唯一问题是,你假设任何浏览器都支持window.Worker
,这不是情况。
如果阻塞应用程序是可行的——假设你期望worker做的计算很轻——你可以将整个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做的
相关文章:
- Web Workers内部的CSS选择
- Web Workers-JSON的可传输对象
- 为什么没有更多地使用 Web Workers
- 是否可以在ChromeCast上的Web Workers中使用setTimout
- Web Workers:SetInterval 和 SetTimeout 可靠性
- Angular2 web workers with ES5
- 是否可以将Morris.js(RaphaelJS)与Web Workers相结合
- Web Workers文件是否可以处理包含或模块
- 创建一个允许HTML5 Web Workers从主线程访问DOM和其他对象的环境是可能的
- XMLHttpRequest和Web Workers访问控制源
- 如何在Javascript中使用Web Workers解析外部JSON文件
- 在使用Angular和Web Workers时从作用域中克隆元素出错
- 使用JavaScript Web Workers进行并行编程/同步
- Web Workers and JSON
- 使用Web Workers使用本地画布函数进行绘图
- importScripts (web workers)
- 为什么在2.2及更高版本中,HTML5 Web Workers支持从Android浏览器中移除?
- 如何通过Web-Workers传递自定义类实例
- JavaScript testing Web Workers
- HTML5 Web Workers可以在Firefox 4中工作,但不能在Chrome 12.0.742.122中工作