Javascript Web Worker postMessage是否从字符串实习中获益?
可以将JavaScript对象发送回UI线程。它采用了一种能够(例如)保存循环引用的方法 结构化克隆算法生成的结构是否应用了优化?当Javascript Web Worker postMessage是否从字符串实习中获益?,javascript,v8,web-worker,postmessage,Javascript,V8,Web Worker,Postmessage,可以将JavaScript对象发送回UI线程。它采用了一种能够(例如)保存循环引用的方法 结构化克隆算法生成的结构是否应用了优化?当postMessage将结构发布到主线程时,它是否以保留引用重用的方式发送它 例如,假设我调用带有以下消息的Worker.prototype.postMessage(): postMessage({ superLongStringThatEnjoysFrequentUse:“superLongStringThatEnjoysFrequentUse”, 此外:[ “s
postMessage
将结构发布到主线程时,它是否以保留引用重用的方式发送它
例如,假设我调用带有以下消息的Worker.prototype.postMessage()
:
postMessage({
superLongStringThatEnjoysFrequentUse:“superLongStringThatEnjoysFrequentUse”,
此外:[
“superLongStringThatEnjoysFrequentUse”,
“superLongStringThatEnjoysFrequentUse”
]
})
我将为我的超长字符串支付多少次(以字节为单位)
该字符串总共使用了4次。这是否意味着将为一个字符串创建4个引用:
- 在工人堆上
- 消息传递到UI线程时正在传输中
- 当UI线程接收到消息时处于静止状态
n*个字节的TELENGTHOFSTRING
字节
重要的是:我的目标是现代的基于Chromium的浏览器。工作线程和主线程肯定至少各有一个副本,因为它们的堆彼此隔离。消息本身不使用字符串重复数据消除,因此它将包含字符数据的多个副本。接收方可能会在以后申请实习,具体取决于您对那里的字符串所做的操作。(对于发送端或根本不涉及
postMessage
的应用程序来说也是如此——并不是所有字符串都被占用,因为占用也要付出代价,所以很容易造成一种情况,即您拥有同一字符串的多个副本。)
也就是说:所有这些都是一个实现细节。它很可能会随着时间的推移而改变。所以这个答案将来可能会过时