在Ajax回调中创建Web Workers

Web Workers creation inside Ajax callback

本文关键字:Web Workers 创建 Ajax 回调      更新时间:2023-09-26

我看到可以在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做的