C'è un modo per passare grandi quantità di dati (più MB) tra un web worker e il thread principale? Lavoro in un progetto in cui ho bisogno di scaricare file, modificarli un po 'e poi in qualche modo consentire all'utente di scaricare il file modificato. Ho trovato i seguenti modi per passare i dati tra un web worker e l'interfaccia utente principalePassa grandi quantità di dati tra web worker e thread principale
- Utilizzo del metodo regolare
postMessage
. - utilizzando oggetti trasferibili (Chrome solo)
- Creare un riferimento URL a un blob e inviare solo l'URL (funziona in Chrome, in altri pure?)
credo (1) va bene quando inviare oggetti più piccoli ma richiede molto tempo e spazio quando si tratta di file più grandi di pochi MB dato che è serializzato e inviato come JSON. Chrome offre un modo per trasferire i dati utilizzando oggetti trasferibili in cui i dati non devono essere copiati. Sfortunatamente questa è una caratteristica di Chrome finora, dal momento che avrebbe altrimenti servito il mio scopo.
L'ultima cosa che ho trovato era, dal lavoratore, creare un URL per un BLOB utilizzando self.webkitURL
e quindi passare solo il riferimento URL all'interfaccia utente. Funziona bene, posso dare l'URL all'utente e possono scaricare il file. Purtroppo non ho trovato un modo per farlo è in Firefox, è possibile?
Esistono altri metodi che è possibile utilizzare per trasferire i dati tra gli operatori e il thread principale?
Purtroppo questo è ancora un'operazione di copia, anche se certamente aumenta la velocità. – Erik