Javascript Web Workers修改全局对象

时间:2013-10-29 13:54:04

标签: javascript web-worker

关于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工作器中而不会导致与主程序运行代码冲突?我想,修改全局变量肯定会成为一个问题。甚至可以将新数组分配给globalarr var吗?感谢帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

无法从Web工作者修改window.global,因为Web工作者没有引用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);