我想处理Web Worker的繁重工作,经过一番研究后,我陷入了对Workers响应延迟的困扰。
为简化起见,我承认我只有一个Web Worker:我创建了一个Web Worker,并使用数据调用postMessage
。
我通过ArrayBuffer
传递数据,以避免复制导致数据传输变慢。
我直接从工人那里回覆了与数据相同的ArrayBuffer
问题如下:我的ArrayBuffer
从我的主线程发送到我的worker的每个实例的速度非常快(大约1-2ms),但是响应非常慢(50到100+ ms)< / p>
代码如下
主线程:
var now = performance.now()
myWorker.postMessage(buffer, [buffer])
myWorker.onmessage = function(data){
console.log(performance.now() - now) // 20 to 100+ ms
}
工人:
onmessage = function(data){
// ~1 ms
self.postMessage(data.data, [data.data])
}
我怀疑我的主线程会因其他处理而变慢,因此消息的句柄会延迟这几毫秒,但是我想确保我的代码还可以,这不是一个已知问题。