psp-b2 html5 web workers
UT 4: introducción a web workers
eugeniaperez.es


UT 4: introducción a web workers

1. Justificación
JUSTIFICACIÓN
Hoy en día se hacen necesarias tecnologías que permitan mejorar la experiencia de usuario, optimizando el rendimiento de la carga de aplicaciones web mediante la realización de tareas costosas en segundo plano.
eugeniaperez.es

UT 4: introducción a web workers

1. Justificación
Gracias a la tecnología que vamos a ver, Web Workers, Tareas pesadas puedan ser ejecutadas sin que tengan un impacto tan elevado en las esperas de carga de interfaz del usuario, ni la bloqueen...
eugeniaperez.es


UT 4: introducción a web workers

1. Justificación
- Mientras que Java presenta mecanismos para abordar la programación concurrente, JavaScript hasta ahora no poseía la característica de la concurrencia.
- Los Web Workers surgen para intentar llenar este hueco. Pero son relativamente pesados y consumen recursos del sistema (CPU, ancho de banda, etc.)
eugeniaperez.es

UT 4: introducción a web workers

1. Justificación
PERO ENTONCES, ¿ESTO DE LOS WEB WORKERS SE UTILIZA...?
Sí, todos los navegadores lo hacen
eugeniaperez.es

UT 4: introducción a web workers

1. Justificación
¿LOS WEB WORKERS Son útiles...?
¡Claro! JS y HTML5 son tendencia
Todo se mueve en dirección a la web
eugeniaperez.es


UT 4: introducción a web workers

1. Justificación
eugeniaperez.es

UT 4: introducción a web workers

1.3 ¿Cuándo utilizar Web Workers?
- Como norma general una aplicación web no debería necesitar más de entorno a 175 mseg para completar una tarea...
- En caso contrario se debería plantear el uso de Web Workers. Más si cabe cuando el navegador y hardware utilizados son dependientes de una aplicación web para móviles.
eugeniaperez.es

No se debe sobrecargar el hilo principal de ejecución
UT 4: introducción a web workers

1.3 ¿Cuándo utilizar Web Workers?
- En Java hemos emulado la concurrencia de hilos que ejecutaban tareas sencillas, haciendo que tuvieran un cierto tiempo de ejecución mediante el bloqueo de los hilos/sleep.
- Con los web workers veremos la ejecución de tareas sencillas en 2º plano (envío de mensajes).
eugeniaperez.es

UT 4: introducción a web workers

1.4 Creación de un Worker
La anterior línea cargará el script nombrado como worker.js y ejecutará su código en paralelo a la página principal.
"Un hilo en HTML5 JS..."
eugeniaperez.es

var worker = new Worker(“worker.js”);
UT 4: introducción a web workers

1.4 Creación de un Worker
Las comunicaciones desde los subprocesos de los workers se realizan mediante el envío de mensajes:
- postMessage: intercambiar mensajes
- onmessage: evento que espera una respuesta
eugeniaperez.es

var hilo= new Worker('tarea.js');
hilo.onmessage = function(respuesta) {
alert(respuesta.data);
};
postMessage('Hello Cuatrovientos!');
tarea.js
UT 4: introducción a web workers

1.4 Creación de un Worker
eugeniaperez.es

Descarga los ejemplos del aula.
UT 4: introducción a web workers

1.4 Creación de un Worker
eugeniaperez.es

EJEMPLO 1
ECO de la información enviada del hilo principal al worker, mostrando su respuesta.
UT 4: introducción a web workers

1.5 Concurrencia en JavaScript
eugeniaperez.es

Antes de seguir vamos a ver cómo se ha conseguido emular el problema de la concurrencia en JavaScript. Para ello se utilizan funciones de manejo de tiempos como setTimeout() o setInterval().
function execute() {
// ToDo
if (stop)
return;
window.setTimeout(execute, 1);
}
Se consultan las peticiones constantemente
cada 1 mseg. permitiendo si la variable stop ha sido
modificada. En este caso se detiene el bucle.
UT 4: introducción a web workers

1.5 Concurrencia en JavaScript
eugeniaperez.es

EJEMPLO 2
Aunque no se trata de concurrencia sí se produce esa sensación dado que, se efectúa una desconexión cada cierto tiempo para ejecutar una tarea. Aunque funciona, no es ni lo más conveniente y ni óptimo puesto que realmente la tarea no se está ejecutando en segundo plano.
UT 4: introducción a web workers

1.6 Comunicación con Web Workers
eugeniaperez.es

EJEMPLO 3
Para intercambiar información entre subprocesos, la información se envía en formato JSON:
postMessage({”value1”:”abc”,”value2”:123}) tendríamos en el destino las variables disponibles en event.data.value1 y event.data.value2.
UT 4: introducción a web workers

1.6 Comunicación con Web Workers
eugeniaperez.es

EJEMPLO 3
- El Worker no es capaz de acceder a variables globales por motivos de integridad.
- Los datos enviados se clonan, son una copia.
- El tiempo de la copia puede afectar a la ejecución.
UT 4: introducción a web workers

1.6 Comunicación con Web Workers
eugeniaperez.es

entrega 1 - Domingo 8
Realiza la práctica de los videojuegos:

UT 4: introducción a web workers

1.6 Comunicación con Web Workers
eugeniaperez.es

EJEMPLO 4
- Se accede a la propiedad msg del mensaje JSON desde las dos ubicaciones. Ni la página y ni el Worker comparten la misma instancia, si no un duplicado.
- La mayoría de los navegadores implementan esta función mediante la codificación/descodificación de estructuras JSON automáticamente en cada fase de la comunicación.
UT 4: introducción a web workers

1.6 Comunicación con Web Workers
eugeniaperez.es

EJEMPLO 5
Encontrar los números pares
UT 4: introducción a web workers

1.11 Llamadas a servicios externos
eugeniaperez.es

APIs
Muchos de los servicios de internet ofrecen actualmente APIs que permiten extender la funcionalidad de nuestra aplicaciones (Spotify, Github, etc).
Imaginémonos que queremos invocar a una API remota mediante un Web Worker, para así realizar esta operación en segundo plano (similar a AJAX).
UT 4: introducción a web workers

1.11 Llamadas a servicios externos
eugeniaperez.es

EJEMPLO 6
Vamos a utilizar los Web Workers para realizar el proceso de cargar los artistas del API de last.fm.
Para cargar ficheros externos, librerías o hacer llamadas a este tipo de servicios desde el Web Worker se utiliza el método importScripts.
UT 4: INTRODUCCIÓN A WEB WORKERS

Text
eugeniaperez.es
ENTREGA VOLUNTARIA (PÁG. 124):
La llamada a la API en el fichero worker.js es:
La respuesta es esta: http://www.last.fm/api/show/artist.getInfo
var getArtistInfo = function(artistName) {
importScripts(lastfm.getApiUrl() + 'artist.getinfo&artist=' + artistName + '&api_key=' +
lastfm.getApiKey() + '&format=json&callback=sendResponse');
};

Web Workers PSP
By eugenia_perez
Web Workers PSP
- 1,408