2

JavaScript Web Workers 的文档令人望而生畏。基本上,我有一个严重的循环,导致浏览器挂起一点。如果我可以将这个繁重的循环卸载到另一个 CPU 内核上,那么我希望可以减轻应用程序的负担,让它运行得更顺畅。我正在尝试使用简单的循环修改全局变量:

var globalarr;

function webWorkerOp(CSV) {
    var lines = CSV.split("%");
    var items, obj, arr = [];

    for (var x = 0, len = lines.length; x < len; x++) {
        items = lines[x].split(",");
        obj = {};
        obj.a = +items[0];
        obj.b = +items[1];
        arr[x] = obj;
    }

    globalarr = arr;
}

我如何将这个循环操作包装到一个 web worker 中而不引起与主程序运行代码的冲突?我想,全局变量的修改肯定是个问题。甚至可以将新数组分配给 globalarr var?帮助表示赞赏。谢谢!

4

1 回答 1

2

无法从 web-worker 修改 a window.global,因为 web-worker 没有对该window对象的引用。您可以通过window.postMessage. 使用这种方法,您可以将数组传回主线程,并在那里设置全局:

主线程

  var worker = new Worker('worker.js');
  var globalArr;

  worker.addEventListener('message', function (e) {
      globalArr = e.data;
  });

工人脚本

// do work
var arr = [1,3,5,]
self.postMessage(arr);
于 2013-10-29T14:15:52.460 回答