HTML5 y la Web móvil: multihilo

El papel de WebWork

       JavaScript para crear entorno multi-hilo, permitiendo que el hilo principal crea subprocesos de trabajo, este último será asignar algunas tareas a ejecutar. Mientras que el hilo conductor, los hilos trabajo que se ejecutan en segundo plano, los dos no interferente. Esperar hasta subproceso de trabajo para tareas de computación completos, y luego devolver los resultados al hilo principal.

Hay varios Web Worker Precauciones de uso

( 1 ) homólogo al límite

subprocesos de trabajo asignados para ejecutar el archivo de script, el archivo de comandos deben ser homólogas con el hilo principal.

( 2 ) el DOM límite

subprocesos de trabajo objeto global se encuentra, y el hilo principal no es la misma, los objetos DOM no pueden leer la página en la que el hilo principal no puede utilizar los objetos documento, las ventanas, los padres. Sin embargo, las discusiones trabajador puede navegante de objeto y de localización de objetos.

( 3 ) enlaces de comunicación

subproceso de trabajo y el hilo principal no está en el mismo contexto, no pueden comunicarse directamente, debe hacerse a través de un mensaje.

( 4 ) límite de la escritura

subprocesos de trabajo no pueden método de alerta () y el método de confirmación (), pero utilizando un objeto XMLHttpRequest petición AJAX ejecutar.

( 5 ) los límites de archivos

subproceso de trabajo no pudo leer archivos locales que no pueden abrir el sistema de archivos de la máquina del sistema ( file: //), se carga el guión, tiene que venir de la red.

El hilo principal

Crear un hilo de Trabajo

      El hilo principal utiliza el nuevo comando, llamando Trabajador () constructor para crear un nuevo hilo trabajador.

var = myWorker nuevo trabajador (jsUrl, opciones);

var myWorker = nuevo Worker ( 'worker.js' , { nombre : 'myWorker' });

El Trabajador () constructor, puede aceptar dos parámetros. El primer parámetro es la URL del script (debe cumplir con la política del mismo origen), este parámetro es necesario, y sólo se puede cargar JS guión, de lo contrario será error. El segundo parámetro es el objeto de configuración opcional. Su función consiste en especificar el nombre del trabajador, que se utiliza para distinguir entre múltiples subprocesos de trabajo.

hilo principal de trabajo envía un mensaje al hilo

worker.postMessage ( 'Hola mundo');

worker.postMessage ({método: 'eco', args: [ 'Trabajo']});

método Parámetro worker.postMessage (), el hilo principal se pasa de datos del trabajador. Puede ser diversos tipos de datos incluyendo datos binarios.

hilo principal trabajo recibe mensajes de vuelta desde el hilo

worker.onmessage = function (event) {

  console.log ( 'mensaje recibido' + event.data);

  hacer algo();

}

La principal Cerrar hilo de rosca Trabajo

worker.terminate (); cerrado activamente Trabajador de Tema principal.

self.close (); para el cierre de sí mismo en el interior del Trabajador.

Tema de trabajo

Trabajador rosca interna tiene que tener una función de monitor, monitor de mensajes de eventos.

self.addEventListener('message', function (e) {
  self.postMessage('You said: ' + e.data);
}, false);

auto en nombre del propio hilo hijo, al objeto global que es sub-hilo. Por lo tanto, es equivalente a los siguientes dos tipos de escritura.

// 写法一
this.addEventListener('message', function (e) {
  this.postMessage('You said: ' + e.data);
}, false);
// 写法二
addEventListener('message', function (e) {
  postMessage('You said: ' + e.data);
}, false);

hilos trabajador puede llamar a diferentes métodos

self.addEventListener('message', function (e) {
  var data = e.data;
  switch (data.cmd) {
    case 'start':
      self.postMessage('WORKER STARTED: ' + data.msg);
      break;
    case 'stop':
      self.postMessage('WORKER STOPPED: ' + data.msg);
      self.close(); // Terminates the worker.
      break;
    default:
      self.postMessage('Unknown command: ' + data.msg);
  };
}, false);

Trabajador guiones de carga

El método de Trabajador interna Si está cargando otros scripts, hay un importScripts especiales ().

importScripts ( 'Script1.js');

El método puede cargar varias secuencias de comandos simultáneamente.

importScripts ( 'Script1.js', 'Script2.js');

hilo compartida

Crear una compartida trabajador necesita SharedWorker constructor:

trabajador var = new SharedWorker ( '-worker.js compartidos');

  • Ejemplos de Trabajador compartida identificado únicamente por una dirección URL, también puede pasar un parámetro de nombre opcional para SharedWorker, para la instancia del trabajador especifica explícitamente un nombre, el nombre del trabajador puede crear varias instancias del mismo archivo JS:
  • Trabajador fronteras compartidas está sujeta a la política del mismo origen, diferentes sitios puede utilizar el mismo nombre. Si desea utilizar el mismo sitio con el mismo nombre del trabajador será diferente de error js.

worker.port.postMessage (txt.value);

  •     work.port es objetos MessagePort
  •     Interfaz MessagePort representa uno de los dos puertos MessageChannel permite el envío de un mensaje de un puerto a otro puerto, y llegar al oyente.
  •     SharedWorker interfaz de puerto atributo objetos de comunicación y de control vuelve MessagePort para compartir el programa de trabajo.

En primer lugar escuchar los sucesos onConnect, no un evento onmessage! Esto se aplica a vincular el evento para escuchar, cuando se tiene un enlace web para comenzar el proceso de intercambio, será llamado a este evento

El puerto de conexión se puede hacer referencia por los puertos parámetro de evento; onmessage Esta referencia puede adjuntar un controlador para manejar el mensaje entrante a través del puerto, que el método postMessage () puede ser usado para enviar una copia de mensaje a los principales usos de rosca del trabajador.

Publicados 349 artículos originales · ganado elogios 161 · vistas 190 000 +

Supongo que te gusta

Origin blog.csdn.net/qq_42192693/article/details/103865363
Recomendado
Clasificación