【发布时间】:2015-12-09 11:43:24
【问题描述】:
在我的共享工作者中使用可转移对象时,我在主线程中收到null for event.data。经过一番搜索,我找到了this post,其中解释了ArrayBuffer 在通过MessagePort 的MessageChannel 时总是丢失。
共享工作者通信也使用端口和消息通道完成。这是否意味着无法在SharedWorker 实例中使用可转移对象?或者有什么解决办法?
我需要将一个巨大的string 从SharedWorkerGlobalScope 传输回主线程。想法是将其转换为ArrayBuffer,如this example 所示,然后传输缓冲区。据说这比发送字符串要快得多...
发送数据:
var arrayBuffer = convertStringToArrayBuffer( string );
var data = {
message: "here is an array buffer",
arrayBuffer: arrayBuffer
};
port.postMessage(data, [data.arrayBuffer]);
接收数据:
worker.port.onmessage = function( event ) {
// data is null
var data = event.data;
}
【问题讨论】:
标签: javascript web-worker transferable shared-worker message-channel