从Web worker发布数据后的引用

时间:2013-03-14 15:54:54

标签: javascript web-worker

我认为您发送的对象的序列化' postMessage'来自Web worker的是使用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时没有引用... 那序列化是怎么做的呢?我可以在所有浏览器中假设该引用吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

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

MDN states

  

主页和工作程序之间传递的消息将被复制,而不是共享。对象在传递给工作者时被序列化,随后在另一端被反序列化。页面和工作程序不共享同一个实例,因此最终结果是在每一端创建了一个副本。大多数浏览器都将此功能实现为structured cloning

事实上,Worker spec for postMessage表示参数传递给基础MessagePort的{​​{1}}和that one is specified以使用structured cloning algorithm postMessage论证。

相关问题