Ich habe einen Web-Worker, der ständig große Mengen von Daten berechnet, die eine Runde ist ein Js-Objekt, die ich dann zu einem ArrayBuffer analysieren und dann senden es zum Hauptthread.Konvertieren von JS-Objekt in ArrayBuffer zu/von Web Worker gleich Engpass
Kann nicht viel über die Berechnung und die Übertragung des ArrayBuffer ist schnell. Das Parsen dieses Objekts verlangsamt jedoch den Prozess. Da das Objekt selbst Arrays aus mehr Objekten enthält.
In Firefox erhalte ich die folgende Warnung:
A script on this page may be busy, or it may have stopped responding.
You can stop the script now, open the script in the debugger,
or let the script continue.
Script: http://localhost/js/util/DataViewSerializer.js:435
Linie 435 bezieht sich auf eine Funktion, wo ich ein Array serialise. In dieser Zeile wird die for-Schleife deklariert.
DataViewSerializer.prototype.setArray = function (array, serializer) {
var i,
l = JSUtil.hasValue(array) ? array.length : 0;
this.setUint32(l);
console.log(array, serializer);
for (i = 0; i < l; i += 1) {
if (serializer !== undefined) {
serializer.serializeTo(array[i], this);
} else {
array[i].serializeTo(this);
}
}
};
Ich bin über Transferable Object zwischen Web-Arbeiter und Haupt-Thread zu lesen. Das Senden von ArrayBuffers scheint der einzige Weg zu sein.
Also meine Frage ist, ob es schnellere Möglichkeiten gibt, ein js-Objekt und ArrayBuffer zu konvertieren? Oder irgendwelche anderen Vorschläge, um dies zu beschleunigen?
Können Sie ein 'ArrayBuffer' anstelle eines' Array' ganzen und dann können Sie nur noch einmal konvertieren? – Xotic750
Könnte ein letzter Ausweg sein, da ich viel Code umschreiben müsste. Und es wäre schwieriger zu debuggen oder zu verfolgen, denke ich. –