Do Shared-Web-Arbeitnehmer beharren auf einer einzigen Seite neu laden, link-navigation
Shared Web-Worker sind so konzipiert, dass mehrere Seiten aus dem gleichen Ort (Ursprung) zu einer einzigen Web-Worker.
Aber es ist mir nicht klar, von der Spezifikation (oder eine andere tutorials und Informationen zu Gemeinsamen Arbeiter), ob der Gemeinsame Arbeiter beibehalten wird, wenn Sie nur ein Fenster/tab aus der Website, und navigieren Sie zu einer anderen Seite auf der gleichen Seite.
Dies wäre sehr nützlich, im Falle einer WebSocket-Verbindung, die aus dem Gemeinsamen Arbeiter, die immer verbunden bleibt, wie Sie die Website navigiert ist. Stellen Sie sich beispielsweise ein Aktien-ticker oder chat-Bereich, noch bestehen (ohne dass eine erneute Verbindung des WebSocket) - sogar während Sie die Website navigiert ist.
- Derzeit storage-event ist Ihre beste option für, die, gemeinsamen Arbeiter vielleicht später... stackoverflow.com/questions/19125823/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich ein paar Tests gemacht, um herauszufinden, die Antwort auf diese in der Praxis.
Firefox noch nicht unterstützt erstellen von WebSocket-verbindungen von Web-worker: https://bugzilla.mozilla.org/show_bug.cgi?id=504553 Also Firefox ist nicht relevant, bis auf, dass der Fehler behoben ist.
IE 10 nicht die Unterstützung für gemeinsam genutzte Web-worker, so dass Sie nicht relevant sind entweder. So, die Blätter Chrom.
Hier ist ein Beispiel um zu testen, shared-web-worker.
Zuerst das HTML:
Dann die Umsetzung des shared worker selbst in
shared.js
:Testergebnisse in Chrome 20 (die Antwort):
Wenn die Seite geladen wird, gleichzeitig in zwei separaten Registerkarten, die Anzahl von verbindungen wächst jedes mal, wenn eine Seite neu geladen wird oder die selbst-referenzieller link angeklickt wird.
Wenn nur eine einzige Instanz von der Seite geladen wird, dann die Anzahl von verbindungen, die sich nie ändert, wenn die Seite neu geladen wird oder der link angeklickt wird.
So, in Chrome 20: Gemeinsamen Web-Arbeitnehmer müssen sich nicht weiter über die Seite wird neu geladen und die navigation zu Links klickt.
Wie es scheint, dies ist im Grunde das gleiche problem wie die Frage " Was passiert mit einem HTML5 web worker-thread, wenn die Registerkarte geschlossen wird, während es läuft?'. Ich denke, der wichtigste Teil der spec ist diese Aussage:
Einer 'aktive Arbeiter benötigt' ist wie folgt definiert:
So, wie ich es verstehe, wenn alle Fenster, die auf einen Arbeiter geschlossen sind, dann wird der browser ist erforderlich, durch die Skillung zu kündigen, der Arbeitnehmer, aber nicht sofort. Je nach fortbestehen wird daher unzuverlässig sein, auch wenn es zu funktionieren scheint gelegentlich.
In Ihrem Beispiel mein Ansatz wäre, um die gesamte Website laden von Ajax - du bist nicht in der Lage sein, um das Web der Arbeitnehmer, wenn Ihre Benutzer haben JS deaktiviert, jedenfalls, dann verwenden Sie die History API, um dem Benutzer die Adresse der Webseite entsprechen der eigentlichen Seite (die Aufrechterhaltung der Suchmaschine und non-JS-Kompatibilität).
Hatte ich Erfolg mit einer etwas Kreisverkehr-Technik, wobei, wenn ich will, um auf die nächste Seite gehen, aber pflegen Sie die SharedWorker, Eröffne ich einen (hoffentlich unauffällig) popup-Fenster, das erzeugt die Arbeiter, warten, bis Sie aktiv werden und eine Nachricht an den ursprünglichen port/Fenster, die dann navigiert zu der neuen Seite und wenn dann die Seite geladen ist, schließt sich das popup. Diese Strategie unterhält mindestens eine aktive Verbindung zu allen Zeiten, so dass die Arbeiter entscheidet nie heruntergefahren.
Diese Technik scheint ziemlich robust, so weit. Zwar sehen die popup-ist etwas nervig, es ist ein vernünftiger Kompromiss für einige Anwendungsfälle.