HTML 5 Los trabajadores web son muy lentos al usar worker.postMessage en un objeto JSON grande. Estoy intentando averiguar cómo transferir un objeto JSON a un trabajador web, utilizando los tipos de objetos transferibles en Chrome, para aumentar la velocidad de este.Web Workers - Objetos transferibles para JSON
Esto es lo que me refiero, y parece que debería acelerar esto un poco: http://updates.html5rocks.com/2011/12/Transferable-Objects-Lightning-Fast
estoy teniendo problemas para encontrar un buen ejemplo de esto (y no creo que quiero usa un ArrayBuffer). Cualquier ayuda sería apreciada.
estoy imaginando algo como esto:
worker = new Worker('workers.js');
var large_json = {};
for(var i = 0; i < 20000; ++i){
large_json[i] = i;
large_json["test" + i] = "string";
};
//How to make this call to use Transfer Objects? Takes approx 2 seconds to serialize this for me currently.
worker.webkitPostMessage(large_json);
Aquí es donde los trabajadores, en su forma actual, se caen, ya que no tienen conexión con el script principal, por lo que cualquier cosa que quiera pasarles implica una tediosa operación de copia. El enfoque de "paso por referencia" de Webkit es definitivamente el camino a seguir. Aparte de eso, me llaman la atención dos puntos: si te encuentras con una demora de 2 segundos, eso probablemente frustra cualquier ahorro que de otro modo hubieras podido obtener al usar trabajadores web, así que también podrías evitarlos y, por lo tanto, también evitar el publicación por entregas. 2) ¿Qué tal web SQL para datos de este tamaño, más rápido? – Utkanos
Básicamente necesito manipular el JSON y transferirlo de vuelta, así que no creo que web SQL funcione. En mis casos normales, no estaría transfiriendo este gran objeto JSON, pero lo usé para propósitos de prueba/demostración. Creo * por lo que he estado leyendo que los Objetos transferibles lo convertirían en una operación de paso a paso muy rápida, lo que da como resultado una transferencia extremadamente puntual, muy por debajo de los 2 segundos actuales. Sin embargo, no puedo encontrar ningún ejemplo de cómo hacerlo. – kclem06
"tipos complejos como archivos, Blob, ArrayBuffer y objetos JSON." - Parece que debe ser compatible: https://developer.mozilla.org/en/Using_web_workers – kclem06