Ponieważ Web Worker JSON serializacji danych pomiędzy wątkami, coś takiego nie działa:Jak przekazywać instancje klasy niestandardowej za pośrednictwem pracowników sieci Web?
worker.js
function Animal() {}
Animal.prototype.foobar = function() {}
self.onmessage = function(e) {
self.postMessage({animal: new Animal()})
}
main.js
let worker = new Worker('worker.js')
worker.onmessage = function(e) {
console.log(e.data)
}
worker.postMessage('go!')
Wynik byłby prosty obiekt ze stratą prototypowej metody foobar
.
Czy możliwe jest przeniesienie niestandardowego obiektu z powrotem do głównego wątku bez utraty jego prototypowych metod? Czy byłoby to możliwe z ArrayBuffer
? Nie znam tych rzeczy, więc jestem trochę zagubiony.
Dzięki za komentarz Emilio. Chociaż twój skrypt nie jest w 100% funkcjonalny, rozumiem. Ale czy proste "nowe zwierzę (JSON.parse (e.data)) nie zrobi tego samego? Nie potrzebujesz odrodzonego? A może twoje rozwiązanie jest nieco szybsze? Moim głównym celem jest utrzymanie większości prac w ramach pracownika, bez blokowania głównego wątku. –
Tak, nie jest w 100% funkcjonalny (napisałem "w locie"). –
Jeśli wiesz, że zawsze przenosisz zwierzę, nie potrzebujesz tego wszystkiego, możesz po prostu przekazać minimalną ilość danych, aby je odtworzyć. Ale jeśli możesz przekazać cokolwiek dowolnego typu, możesz użyć tego podejścia. Np .: 'var zoo = new Zoo ({jail1: new Lion ('pepe', 12), jail2: new Tigger ('winny', 5)}); worker.postMessage (zoo); ' –