Использую 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-объект.
Продвижение своими сайтами как стратегия роста и независимости