[Bearbeiten: Diese Frage möglicherweise engerer Bereich, so werde ich feststellen, dass ich derzeit Chrome 49.0.2623.112 m (64-Bit) mit Standardeinstellungen, wenn ich das merke. Ich bin derzeit mit HTTPS, aber ich beobachtete sie vor dem Schalter.]Was macht ein Web-Arbeiter, wenn der Besitzer nicht im Fokus ist?
Ich habe eine Anwendung, die auf dem Web-Arbeiter aus AJAX Polling gibt. Es ist keine unglaubliche Ersparnis in Bezug auf die Leistung, aber es macht die Anwendung leichter verständlich und bietet Potenzial für zukünftige Leistungsvorteile.
ich hinzufügen, eine Konsolenprotokollierung Linie an den Arbeitnehmer, so dass es nur sagt mir jedesmal, wenn die XHR Antrag gestellt wird. Wie Sie vielleicht wissen, wenn Duplikate von Protokollzeilen in Chrome eingehen, zeichnet der Inspector nur die Anzahl der Duplikate auf.
Da ich die Seite, kann ich in der Konsole sehen: (52) XHR invoked
Wenn ich die Seite im Fokus haben, ich sehe, dass integer alle 2 Sekunden erhöhen, je mein Abfrageintervall.
JEDOCH
Als ich für eine Weile auf einem anderen Tab zu wechseln, und dann wieder, dauert es einige Sekunden für diese Nummer zu aktualisieren, zu welchem Zeitpunkt es nur Updates nach der anderen. Das liegt möglicherweise daran, dass der Worker tatsächlich pausiert, was in dieser bestimmten Anwendung in Ordnung ist, oder dass der Worker noch ausgeführt wird, aber die Konsolen-API die Protokollierungszeile vom Worker nicht empfangen kann, wenn der Elternteil nicht sichtbar ist . Nicht sicher.
Aber die wichtige Sache, die ich versuche zu lösen, ist die Verzögerung, wenn ich zur Registerkarte zurückkehre. Wenn es sich um eine ansprechende Aktualisierung des Dashboards handelt, ist eine Verzögerung von 10-60 Sekunden vor dem Fortfahren der Updates bemerkbar und ein UI-Leistungsfehler.
Kann jemand einen Einblick darüber geben, was mit dem Web Worker passiert, wenn der Besitzer den Fokus verliert? Steht es tatsächlich jede Arbeit an, die erledigt werden muss (auf XHR-Nachricht), und macht es dann, wenn der Besitzer zurückkommt?
Hält man den Abrufmechanismus manuell an, wenn der Fokus verloren geht?
Haben Sie darüber nachgedacht einen Zeitstempel in die Log-Ausgabe hinzugefügt? Klingt nicht nach einer harten Sache ... –
Es würde zum Beispiel verifizieren, ob es der Worker ist, der im Leerlauf ist, oder der Nachrichtenkanal oder die Konsole. Ich hatte Arbeiter einige Zeit für verschiedene Sachen benutzt und sie haben nicht angehalten, als ich die Registerkarte verließ, also habe ich Gründe zu denken, dass das Problem woanders liegt. –
Wenn der Arbeiter noch lief, wie ich vermute, würden die Zeitstempel auf der Ausgabe kohärent sein (z. B. alle 30 Sekunden). Ehrlich gesagt, sollten Sie als erstes ein jsFiddle machen, das das Problem demonstriert. Jetzt rate ich nur, was das verursachen könnte. Kommt es sogar vor, wenn Sie den Code vereinfachen? –