在我的共享工作者中使用可转移对象时,我在主线程中收到null
。event.data
经过一番搜索,我发现这篇文章解释说ArrayBuffer
当它通过 a 时总是MessagePort
丢失MessageChannel
。
共享工作者通信也使用端口和消息通道完成。这是否意味着无法在SharedWorker
实例中使用可转移对象?还是有一些解决方法?
我需要将一个巨大string
的从SharedWorkerGlobalScope
回传输到主线程。想法是将其转换ArrayBuffer
为如本例所示的,然后传输缓冲区。据说这比发送字符串要快得多......
发送数据:
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;
}