Javascript Web Worker 修改全局对象

Javascript Web Workers Modifying Global Object

本文关键字:全局 对象 修改 Worker Web Javascript      更新时间:2023-09-26

关于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 吗?感谢帮助。谢谢!

无法从 Web worker

修改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);