Я хочу справиться с тяжелым процессом с помощью Web Worker, и после некоторых исследований я застрял в задержке ответа моих Workers.
Чтобы упростить, я признаю, что у меня есть только один Web Worker: я создаюВеб-работник, и я звоню postMessage
со своими данными.
Я передаю свои данные с помощью ArrayBuffer
, чтобы избежать замедления передачи данных из копии.
Я отвечаю непосредственно от моего работника с тем же ArrayBuffer
, что и данные
Проблема вследующее: мой ArrayBuffer
очень быстро отправляется из моего основного потока на каждый экземпляр моих работников (что-то вроде 1-2 мс), но ответ очень медленный (от 50 до 100+ мс)
Кодследующий
Основной поток:
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])
}
Я подозреваю, что мой основной поток будет замедлен другой обработкой, поэтому дескриптор сообщениязадерживается на несколько миллисекунд, но я хочу убедиться, что мой код в порядке, и это не известная проблема.