Bevor ich mich auf die Suche nach dem Fehler gebe, gibt es Tips bzgl. Debugging bei Web Workern?
Vermutlich ist es ein Bug in der Firefox-Engine, aber ich würde es gerne etwas eingrenzen, wo genau die Ursache liegt ... bevor ich es auf die Bugliste bei Mozilla setze.
Das Problem tritt nur im Firefox auf und ist zudem scheinbar auch "zufällig", d.h. es tritt bei Wiederholungen an unterschiedlichen Stellen auf.
Für eine komplexe Berechnung müssen mehrer Daten aus unterschiedlichen Dateien (über 100 Dateien) eingelesen werden. Für die Performance wird das Ganze in einen Web-Worker ausgelagert. Dieser Web-Worker started dann das Einlesen der Dateien, wobei für das Einlesen einer Datei wiederum ein eigener "Sub" Web-Worker genutzt wird, der sein Ergebnis zurückliefert und dann geschlossen wird. Diese "Sub" Web-Worker für eine einzelne Datei werden nicht alle gleichzeitig gestartet, sondern nur ein Anzahl X. Erst nachdem diese X "Sub" Web-Worker abgearbeitet sind, werden die nächsten gestartet, bis alle Daten aus den Dateien eingelesen wurden. Der erste Web-Worker liefert dann das Ergebnis an den Main-Thread zurück.
In Chromium basierten Browsern funktioniert es wunderbar und der Performancegewinn durch die Aufteilung in einzelne Web-Worker ist sehr gut.
Nur Firefox macht Probleme ... ohne erkennbare Fehler/Ursache. Firefox startet auch den ersten "Main" Web-Worker, der dann die anderen "Sub" Web-Worker parallel startet. Je nach Durchlauf stoppt Firefox aber an unterschiedlicher Stelle bei einem Durchlauf, d.h. nach unterschiedlicher Anzahl von eingelesenen Dateien. Es scheint ganz so, als ob der "Main" Web-Worker irgendwann keine neuen "Sub" Web-Worker starten kann. Wie gesagt, je nach Durchlauf nach unterschieldicher Anzahl von bereits eingelesenen Dateien. Also nicht immer nach einer bestimmten Anzahl von Dateien oder nach einer bestimmten Datei.
Debugging ist schwierig. Kann man die Web-Worker irgendwie markieren, sodass man nachvolluziehen kann, ob ein Web-Worker gestartet wurden und wenn nicht, warum er nicht gestartet wurde? Ich bekomme keine Fehlermeldungen am Error-Listener.
Bin für jeden Tipp bzw. Literatur dankbar. Gruss