在Ajax回调中创建Web Workers

时间:2015-05-31 14:20:09

标签: javascript jquery web-worker

我看到可以在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,在那里我用它做了一些事情并将消息发送回主线程。这有什么不对吗?

1 个答案:

答案 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