Javascript Web Worker postMessage是否从字符串实习中获益?

Javascript Web Worker postMessage是否从字符串实习中获益?,javascript,v8,web-worker,postmessage,Javascript,V8,Web Worker,Postmessage,可以将JavaScript对象发送回UI线程。它采用了一种能够(例如)保存循环引用的方法 结构化克隆算法生成的结构是否应用了优化?当postMessage将结构发布到主线程时,它是否以保留引用重用的方式发送它 例如,假设我调用带有以下消息的Worker.prototype.postMessage(): postMessage({ superLongStringThatEnjoysFrequentUse:“superLongStringThatEnjoysFrequentUse”, 此外:[ “s

可以将JavaScript对象发送回UI线程。它采用了一种能够(例如)保存循环引用的方法

结构化克隆算法生成的结构是否应用了优化?当
postMessage
将结构发布到主线程时,它是否以保留引用重用的方式发送它

例如,假设我调用带有以下消息的
Worker.prototype.postMessage()

postMessage({
superLongStringThatEnjoysFrequentUse:“superLongStringThatEnjoysFrequentUse”,
此外:[
“superLongStringThatEnjoysFrequentUse”,
“superLongStringThatEnjoysFrequentUse”
]
})
我将为我的超长字符串支付多少次(以字节为单位)

该字符串总共使用了4次。这是否意味着将为一个字符串创建4个引用:

  • 在工人堆上
  • 消息传递到UI线程时正在传输中
  • 当UI线程接收到消息时处于静止状态
或者,在任何情况下,重新使用一个长字符串会花费我
n*个字节的TELENGTHOFSTRING
字节


重要的是:我的目标是现代的基于Chromium的浏览器。

工作线程和主线程肯定至少各有一个副本,因为它们的堆彼此隔离。消息本身不使用字符串重复数据消除,因此它将包含字符数据的多个副本。接收方可能会在以后申请实习,具体取决于您对那里的字符串所做的操作。(对于发送端或根本不涉及
postMessage
的应用程序来说也是如此——并不是所有字符串都被占用,因为占用也要付出代价,所以很容易造成一种情况,即您拥有同一字符串的多个副本。)

也就是说:所有这些都是一个实现细节。它很可能会随着时间的推移而改变。所以这个答案将来可能会过时