Web Compartido De Los Trabajadores están diseñados para permitir que varias páginas del mismo sitio (origen) para compartir una única Web Trabajador.

Sin embargo, no es claro para mí a partir de la especificación (o de otros tutoriales e información sobre Compartida de los Trabajadores) si el Compartidas Trabajador persistirá si sólo tiene una ventana/pestaña del sitio y navegar a otra página en el mismo sitio.

Esto sería más útil en el caso de una conexión WebSocket del Trabajador que permanece conectado como el sitio es desplazado. Por ejemplo, imagine una cotización o el chat que persisten (sin tener que volver a conectar el WebSocket), incluso aunque el sitio es desplazado.

InformationsquelleAutor kanaka | 2012-02-17

3 Comentarios

  1. 23

    He hecho algunas pruebas para encontrar la respuesta a esto en la práctica.

    Firefox no es compatible aún con la creación de WebSocket conexiones de los Web workers: https://bugzilla.mozilla.org/show_bug.cgi?id=504553 Así que Firefox no es relevante hasta que el fallo se resuelve.

    Es decir, un 10 no tiene soporte para Web Compartido de los Trabajadores así que no es pertinente, ya sea. De modo que las hojas de Chrome.

    Aquí es un ejemplo para probar la web compartido de los trabajadores.

    Primero el HTML:

    <!DOCTYPE html>
    <html>
    <body>
        <a href="shared.html">reload page</a>
        <script>
            var worker = new SharedWorker("shared.js");
            worker.port.addEventListener("message", function(e) {
                console.log("Got message: " + e.data);
            }, false);
            worker.port.start();
            worker.port.postMessage("start");
        </script>
    </body>
    </html>

    A continuación, la aplicación de la compartida trabajador de la misma en shared.js:

    var connections = 0;
    
    self.addEventListener("connect", function(e) {
        var port = e.ports[0];
        connections ++;
        port.addEventListener("message", function(e) {
            if (e.data === "start") {
                var ws = new WebSocket("ws://localhost:6080");
                port.postMessage("started connection: " + connections);
            }
        }, false);
        port.start();
    }, false);

    Los resultados de la prueba en Chrome 20 (la respuesta):

    Cuando la página se carga simultáneamente en dos pestañas diferentes, el número de conexiones crece cada vez que una de las páginas es de reloaded o la auto-referencial se hace clic en enlace.

    Si una única instancia de que se carga la página, a continuación, el número de conexiones nunca cambia cuando la página se vuelve a cargar o hace clic en el enlace.

    Así, en Chrome 20: Web Compartido de los Trabajadores no persisten a través de recargar la página y el enlace de navegación clics.

    • +1 para la experimentación
    • Si me recarga la página o abrir uno nuevo – SharedWorker se recrea? Escribo de la consola.log(new Date().getTime()); Y el tiempo siempre se muestran diferentes en la consola, después de recargar la página. Así que siempre se crea una nueva WebSocket instancia después de que la página se vuelve a cargar, ¿correcto?
  2. 5

    Parece que este es básicamente el mismo problema que la pregunta » ¿Qué le sucede a una web HTML5 subproceso de trabajo cuando la pestaña se cierra mientras se está ejecutando?’. Creo que la parte clave de la especificación es esta declaración:

    Los agentes de usuario pueden invocar la «matar a un trabajador» modelo de procesamiento en un
    trabajador en cualquier momento, por ejemplo, en respuesta a las solicitudes del usuario, en respuesta a
    CPU de gestión de cuotas, o cuando un trabajador deja de ser un activo necesario
    trabajador si el trabajador continúa la ejecución, incluso después de su cierre bandera
    se establece en true.

    Un ‘activo trabajador necesitado‘ se define como sigue:

    Un trabajador, se dice ser un activo trabajador necesitado si alguno de los Documentos
    los objetos en el trabajador los Documentos están en plena actividad.

    Así, como yo lo entiendo, si todos los windows que hace referencia a un trabajador se cierra el navegador es requerido por la especificación para terminar el trabajo, pero no de inmediato. En función de la persistencia por lo tanto será poco fiable, incluso si parece que el trabajo de vez en cuando.

    En su ejemplo, mi enfoque sería cargar todo el sitio por Ajax – no vas a ser capaz de ejecutar el Web de los Trabajadores, si los usuarios tienen JS movilidad de todos modos, a continuación, utilizar la La historia de la API para hacer que el usuario de la dirección de la página corresponden a la página actual (para mantener el motor de búsqueda y la no-JS de compatibilidad).

    • Mi pregunta es si la transición (haga clic en el enlace) de una página a otra en el mismo sitio (o una recarga en el mismo sitio) se mueve el trabajador en un activo no necesita del estado, y si este es asesinado. En otras palabras, ¿ir de activos para activos o de transición a la no-activo primero antes de la próxima carga de la página (y si es así es un periodo bastante largo, a la materia)? Esta es una pregunta acerca de lo que los navegadores hacen realmente, y lo que la intención es. La especificación propio texto es ambiguo, es por eso que estoy pidiendo.
    • Sí, la descarga de la página se mueve a un estado donde debe de estar muerto (ver paso 5), pero las especificaciones no lo necesita para ser asesinados inmediatamente. Como he dicho, puede trabajar de vez en cuando, pero no esperes que sea fiable. Si usted quiere saber lo que los navegadores en realidad, lo intente.
  3. 3

    He tenido éxito con un poco de la rotonda de la técnica en la cual cuando quiero ir a la siguiente página, pero mantener la SharedWorker, abro un (esperemos discreta) de la ventana emergente que crea el mismo trabajador, espere a que se active y envíe un mensaje al puerto original/de la ventana, que luego se desplaza a la nueva página y luego, cuando la carga de la página, cierra la ventana emergente. Esta estrategia mantiene al menos una conexión activa en todo momento, por lo que el trabajador nunca decide apagar.

    Esta técnica parece ser bastante robusto hasta el momento. Aunque viendo la ventana emergente es algo molesto, es un compromiso razonable para algunos casos de uso.

    • ¿Me puedes mostrar tu ejemplo, por favor. Siempre estoy creando uno nuevo, incluso después de recargar la página.

Dejar respuesta

Please enter your comment!
Please enter your name here