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