Die Beendigung von Service Worker durch einen Timeout-Timer wurde abgebrochen, da DevTools angehängt ist

8

Betriebssystem: Windows 10 Pro
webpack: 1.14.0
sw-precache-webpack-plugin: 0.9.1
sw-precache: 5.0.0

Also starte ich meine Seite und mache für einige Momente nichts aktiv, und dann wird die oben angegebene Fehlermeldung in devTools erzeugt. Wenn ein Prozess ausgeführt wird, tritt der Fehler nicht auf

Mein React-Code lautet wie folgt:

webpack.config.prod.js

%Vor%

app.js

%Vor%

Was ist das Problem hier?

    
TheoG 11.03.2017, 10:02
quelle

1 Antwort

19

Normalerweise werden untätige Service-Mitarbeiter aggressiv als Optimierung getötet, um zu verhindern, dass Code im Hintergrund ausgeführt wird, wenn er nicht benötigt wird.

Chrome erkennt, ob DevTools geöffnet ist, und tötet den Service-Mitarbeiter nicht automatisch. Die Annahme ist, dass, wenn ein Entwickler DevTools verwendet, diese das Verhalten des Service-Arbeiters debuggen oder auf andere Weise untersuchen, und das Töten des Service-Arbeiters würde den Entwickler vereiteln.

Die Lebensdauer des Service-Mitarbeiters wurde im Stillen verlängert, aber wie hier beschrieben , für die letzten Versionen von Chrome, die Nachricht

  

Die Beendigung von Service Worker durch einen Timeout-Timer wurde abgebrochen, weil   DevTools ist angehängt.

wird in der Konsole protokolliert, um den Entwickler wissen zu lassen, dass der Service-Mitarbeiter normalerweise getötet worden wäre, aber der Auftrag, ihn zu beenden, wurde abgebrochen, weil DevTools geöffnet war.

Sie könnten fragen, welchen Unterschied das macht? Warum sollten Sie den Entwickler wissen lassen, dass etwas nicht passiert ist?

Die Motivation, dies herauszustellen, besteht darin, den Entwickler wissen zu lassen, dass etwas, was reale Benutzer in der Produktion treffen (d. h. der Service-Mitarbeiter wird wiederholt getötet / neu gestartet), in dieser Debug-Umgebung nicht stattfindet. Dies macht einen Unterschied, wenn ein Entwickler einen fehlerhaften Service-Worker-Code geschrieben hat, der falsche Annahmen über die Persistenz des globalen Status macht . Es ist einfach, Code zu schreiben, der davon ausgeht, dass der globale Status immer bestehen bleibt, und funktioniert, wenn er mit geöffneten DevTools ausgeführt wird (weil der Service-Mitarbeiter nie getötet wird) und dann in der Produktion nicht funktioniert.

    
Jeff Posnick 11.03.2017, 23:03
quelle