Michael_K: Debugging Web Worker in Firefox

Beitrag lesen

Hallo Rolf

Eins solltest Du aber auf jeden Fall noch ändern: terminate() ist die Notlösung für wildgewordene Worker. Eigentlich sollte ein Worker, der weiß, dass er fertig ist, self.close() aufrufen.

Was waere das Hauptargument hierfuer? Ich habe auch gelesen, das self.close() die "gracefully methode" ist und terminate die Methode mit dem Vorschlaghammer. Ich verwende inzwischen aber tatsaechlich nur noch terminate() aus den folgenden Gruenden

  • Es ist unuebersichtlicher, wenn das Beenden eines Workers an verschiedenen Code-Stellen ( bei ESM oft in unterschiedlichen Modulen ) hinterlegt ist.
  • Ich habe mir angewoehnt, immer Kontext bei postMessage mitzugeben (wie im Beispiel hinterlegt die Art der Message mit dem Key "cmd"). Das hat den Vorteil, dass am Listener an einer Stelle hinterlegt werden kann, ob der Worker je nach Art der Message zu beenden ist.
  • Ich hatte festgestellt, dass ein self.close() den Worker scheinbar nicht zwingend unmittelbar beendet. Zum Beispiel, wenn in einem Worker mehrere async Aufrufe noch laufen, dann hat self.close() gewartet, bis alle abgearbeitet wurden - zumindest habe ich es so in Erinnerung, als ich mit Web Workern getestet hatte. Ob es immer noch so ist, weiss ich nicht. Aber oft besteht kein Interesse, dass der Worker noch unnoetig lange offen ist und arbeitet.

Gruss Michael