Web Worker postMessage 是否受益于字符串实习?

Does Web Worker postMessage benefit from string interning?

Worker.prototype.postMessage() can send JavaScript objects back to the UI thread. It employs a Structured clone algorithm,能够(例如)保留循环引用。

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

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

postMessage({
  superLongStringThatEnjoysFrequentUse: 'superLongStringThatEnjoysFrequentUse',
  also: [
    'superLongStringThatEnjoysFrequentUse',
    'superLongStringThatEnjoysFrequentUse'
  ]
})

我要为我的超长字符串支付多少次价格(以字节为单位)?

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

或者是否存在重新使用长字符串会花费我 n * byteLengthOfString 字节的情况?

以防万一:我的目标是基于现代 Chromium 的浏览器。

worker和主线程肯定至少各有一份,因为他们的堆是相互隔离的。消息本身并没有对字符串进行去重,所以会包含多份字符数据。接收方稍后可能会申请实习,具体取决于您对那里的字符串的处理方式。 (发送方或根本不涉及 postMessage 的应用程序也是如此——并非所有字符串都被保留,因为保留也是有代价的,所以很容易造成你有的情况同一个字符串的几个副本。)

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