Использую Worker для слияния двух крупных JS-объектов, но почему-то пересылка данных туда-обратно занимает чуть ли не по 2 секунды (так, как было до внедрения воркеров). Прочитал, что можно использовать Transferable Object
. Якобы невероятно ускоряет скорость передачи данных в Worker и обрватно.
В посте Google Developers сказано:
This allowed the postMessage() API to accept messages that were not just strings, but complex types like File, Blob, ArrayBuffer, and JSON objects
Ну вот я и передаю JS-объект:
var workerData = {
task: 'merge',
data: {
new: iterationData,
original: {
airlines: window.airlines,
airports: window.airports,
filters: window.filters,
flight_info: window.flight_info,
gates_info: window.gates_info,
proposal_seats: window.proposal_seats,
proposals: window.proposals,
filteredProposals: window.filteredProposals,
rules: window.rules
}
}
}
merge_worker.postMessage(workerData, [workerData])
И лювлю в консоли предупреждение:
Value at index 0 does not have a transferable type
Почему мой код не работает?
Как написано в документации, Transferable Object
должен быть следующих типов ArrayBuffer
, MessagePort
или ImageBitmap
.
Переданные (transferable) объекты могут быть экземплярами классов ArrayBuffer, MessagePort или ImageBitmap. null не является допустимым значением для передачи прав.
Соответственно, вы не можете передать туда просто JS-объект.
Возможно, можно попробовать сериализовать ваш объект в ArrayBuffer
, но не думаю, что это будет быстрее, чем слияние JS-объект.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я нашел способ создать фиксированный контейнер с blur-эффектом, как оказалось способ простой, но достаточно страшныйЧто будет с индексацией...