stringtranslate.com

trabajador web

Un trabajador web , tal como lo define el World Wide Web Consortium (W3C) y el Web Hypertext Application Technology Working Group (WHATWG), es un script JavaScript ejecutado desde una página HTML que se ejecuta en segundo plano , independientemente de los scripts que también puedan haber sido ejecutado desde la misma página HTML. [1] Los trabajadores web a menudo pueden utilizar CPU de múltiples núcleos de manera más efectiva. [2]

El W3C y WHATWG visualizan a los trabajadores web como secuencias de comandos de larga duración que no se ven interrumpidas por secuencias de comandos que responden a clics u otras interacciones del usuario. Evitar que dichos trabajadores sean interrumpidos por las actividades de los usuarios debería permitir que las páginas web sigan respondiendo al mismo tiempo que ejecutan largas tareas en segundo plano.

La especificación del trabajador web es parte del HTML Living Standard. [1]

Descripción general

Según lo previsto por WHATWG, los trabajadores web son relativamente pesados ​​y no están destinados a ser utilizados en grandes cantidades. Se espera que sean de larga duración, con un alto costo de rendimiento inicial y un alto costo de memoria por instancia. [1]

Los trabajadores web se ejecutan fuera del contexto de los scripts de un documento HTML. En consecuencia, aunque no tienen acceso al DOM , pueden facilitar la ejecución simultánea de programas JavaScript.

Características

Los trabajadores web interactúan con el documento principal mediante el paso de mensajes . El siguiente código crea un trabajador que ejecutará JavaScript en el archivo proporcionado.

var trabajador = nuevo trabajador ( "worker_script.js" );    

Para enviar un mensaje al trabajador, postMessagese utiliza el método del objeto trabajador como se muestra a continuación.

obrero . postMessage ( "¡Hola mundo!" );

La onmessagepropiedad utiliza un controlador de eventos para recuperar información de un trabajador.

obrero . onmessage = function ( evento ) { alerta ( "Mensaje recibido" + evento . datos ); hacer algo (); } function hacerAlgo () { //hacer trabajo trabajador . postMessage ( "¡Trabajo hecho!" ); }       obrero . Terminar ();

Una vez que se despide a un trabajador, queda fuera de alcance y la variable que hace referencia a él queda indefinida; en este punto se debe crear un nuevo trabajador si es necesario.

Ejemplo

El uso más sencillo de los trabajadores web es realizar una tarea computacionalmente costosa sin interrumpir la interfaz de usuario.

En este ejemplo, el documento principal genera un trabajador web para calcular números primos y muestra progresivamente el número primo encontrado más recientemente.

La página principal es la siguiente:

<!DOCTYPE html> < html >  < head >  < title > Ejemplo de trabajador: cálculo de un solo núcleo </ title >  </ head >  < body >  < p > El número primo más alto descubierto hasta ahora es: < id de salida  = "resultado " ></ salida >> p > < script > var trabajador = nuevo trabajador ( 'worker.js' ); obrero . onmessage = función ( evento ) { documento . getElementById ( 'resultado' ). Contenido de texto = evento . datos ; }; </script> </body> </html>                 

La Worker()llamada al constructor crea un trabajador web y devuelve un workerobjeto que representa a ese trabajador web, que se utiliza para comunicarse con el trabajador web. El controlador de eventos de ese objeto onmessagepermite que el código reciba mensajes del trabajador web.

El Web Worker en sí es el siguiente:

var norte = 1 ; var valor_final = 10 ** 7 ; buscar : mientras ( n <= valor_final ) { n ++ ; for ( var i = 2 ; i <= Math . sqrt ( n ); i ++ ) if ( n % i == 0 ) continuar la búsqueda ; // ¡encontré un primo! postMensaje ( n ); }                               

Para enviar un mensaje a la página, el postMessage()método se utiliza para publicar un mensaje cuando se encuentra un número principal. [1]

Apoyo

Si el navegador admite trabajadores web, una propiedad de trabajador estará disponible en el objeto de ventana global. [3] La propiedad Worker no estará definida si el navegador no la admite.

El siguiente código de ejemplo comprueba la compatibilidad con trabajadores web en un navegador.

función browserSupportsWebWorkers () { tipo de ventana de retorno . Trabajador === "función" ; }       

Actualmente, los trabajadores web son compatibles con Chrome , Opera , Edge , Internet Explorer (versión 10), Mozilla Firefox y Safari . [4] [5] [6] Mobile Safari para iOS ha admitido trabajadores web desde iOS 5. El navegador de Android admitió por primera vez trabajadores web en Android 2.1, pero la compatibilidad se eliminó en las versiones de Android 2.2 a 4.3 antes de restaurarse en Android 4.4. [7] [8]

Referencias

  1. ^ abcd Web Workers, WHATWG , consultado el 2 de enero de 2023
  2. ^ "Estándar de vida HTML". Html.spec.whatwg.org . 30 de enero de 2017 . Consultado el 31 de enero de 2017 .
  3. ^ "HTML5 en funcionamiento" Mark Pilgrim. O'Reilly/Google Press. agosto de 2010
  4. ^ "Presentación de HTML5", Lawson, B. y Sharp, R., 2011.
  5. ^ "HTML5 y CSS3" Brian P. Hogan. Los programadores pragmáticos, LLC 2010.
  6. ^ "¿Puedo utilizar... Web Worker?". caniuse.com . Consultado el 30 de septiembre de 2019 .
  7. ^ "Spotlight: Evaluación comparativa de Android 2.1 con Web Workers: motor isogénico". Archivado desde el original el 19 de octubre de 2013 . Consultado el 10 de julio de 2011 .
  8. ^ "¿Puedo usar... tablas de soporte para HTML5, CSS3, etc.?". caniuse.com . Consultado el 10 de junio de 2017 .

enlaces externos