【发布时间】:2021-02-25 16:12:00
【问题描述】:
Worker.prototype.postMessage() 可以将 JavaScript 对象发送回 UI 线程。它使用Structured clone algorithm,它能够(例如)保存循环引用。
结构化克隆算法生成的结构是否应用了string interning 优化?当postMessage 将结构发布到主线程时,它是否以保留引用重用的方式发送它?
例如,假设我使用以下消息调用Worker.prototype.postMessage():
postMessage({
superLongStringThatEnjoysFrequentUse: 'superLongStringThatEnjoysFrequentUse',
also: [
'superLongStringThatEnjoysFrequentUse',
'superLongStringThatEnjoysFrequentUse'
]
})
我将为我的超长字符串支付多少次(以字节为单位)?
该字符串总共使用了 4 次。这是否意味着将对一个字符串创建 4 个引用:
- 在工人堆上
- 消息传递到 UI 线程时的传输中
- UI 线程接收到消息时处于静止状态
或者在任何情况下重复使用长字符串会花费我 n * byteLengthOfString 字节?
以防万一:我的目标是现代基于 Chromium 的浏览器。
【问题讨论】:
标签: javascript v8 web-worker postmessage