Dal Web Worker JSON serializzare i dati tra le discussioni, qualcosa come questo non funziona:Come passare istanze di classi personalizzate tramite Web-Workers?
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!')
Il risultato sarebbe un oggetto semplice con la perdita del metodo prototipo foobar
.
È possibile trasferire nuovamente l'oggetto personalizzato al thread principale senza perdere i suoi metodi di prototipo? Come, sarebbe possibile con ArrayBuffer
? Non ho familiarità con quella roba, quindi sono un po 'perso.
Grazie per il tuo commento Emilio. Mentre il tuo script non è funzionale al 100%, ho capito il punto. Ma un semplice 'new Animal (JSON.parse (e.data)) non farebbe la stessa cosa? Non c'è bisogno di un reviver? O la tua soluzione è un po 'più veloce? Il mio obiettivo principale è quello di mantenere la maggior parte del lavoro all'interno del lavoratore, senza bloccare il thread principale. –
Sì, non è funzionale al 100% (ho scritto "al volo"). –
Se sai che trasferisci sempre un animale non hai bisogno di tutto questo stuf, puoi semplicemente passare poi i dati minimi per ricrearlo. Ma se puoi passare qualsiasi cosa di qualsiasi tipo, puoi usare questo approccio. I.e .: 'var zoo = new Zoo ({jail1: new Lion ('pepe', 12), jail2: new Tigger ('winny', 5)}); worker.postMessage (zoo); ' –