javascript - 从 web worker 发布数据后的引用

标签 javascript web-worker

我认为您从 Web Worker 使用“postMessage”发送的对象的序列化是使用 JSON.serialize 进行的,反序列化是使用 JSON.parse 进行的。 但是我用那个工作代码做了一个测试(在 Firefox 中):

function A() {
    this.id = 3;
    this.save;
}

var a1 = new A();
var a2 = new A();

a1.save = a2;

postMessage({
    'a1' : a1,
    'a2' : a2    
});

现在在主文件中你有:

w.onmessage = function(event) {
    event.data.a2.id = 7;
};

问题是 a1.save.id 中的值在那之后也是 7。 所以必须有一个引用,但是当你使用 JSON.serialze 和 JSON.parse 时,没有引用...... 那么连载是如何制作的呢?我可以在所有浏览器中假设该引用吗? 谢谢!

最佳答案

不,Worker 通信不使用 JSON 进行序列化。您可以手动执行并传递字符串,但您不需要这样做。

MDN states :

Messages passed between the main page and workers are copied, not shared. Objects are serialized as they're handed to the worker, and subsequently, de-serialized on the other end. The page and worker do not share the same instance, so the end result is that a duplicate is created on each end. Most browsers implement this feature as structured cloning.

事实上,Worker spec for postMessage表示参数被传递给底层 MessagePortpostMessage,并且 that one is specified使用 structured cloning algorithmmessage 参数上。

关于javascript - 从 web worker 发布数据后的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15414046/

相关文章:

javascript - jQuery 克隆元素仅在循环内 append 一次克隆项

JavaScript 内部工作原理解释

javascript - 关于 Web Worker 并行性

javascript - 如何从 ArrayBuffer 构建 Float32Array

javascript - 从WebWorker同步获取数据?

javascript - 如何使用我的 php 网站从 facebook 注销

javascript - 点击后使下拉菜单停留

javascript - 删除 URL 上的 #book anchor

javascript - 如何通过 Web-Workers 传递自定义类实例?

android - Cordova 应用程序因密集计算而阻塞