“Fuera del hilo principal” | Programar Plus

JavaScript es lo que llaman “de un solo subproceso”. Como dice Brian Barbour:

Esto significa que tiene una pila de llamadas y un montón de memoria.

Todos sentimos un síntoma de eso con regularidad en forma de jank de rendimiento y no interactividad en elementos o sitios completos. Si le damos a JavaScript muchos trabajos y se pone muy ocupado haciéndolos, entonces no está haciendo otras cosas, como, por ejemplo, manejar nuestros controladores de eventos rápidamente.

Recientemente, ha habido una combinación interesante de punto / contrapunto en este sentido.

Das Surma ha estado abogando por quitar la mayor cantidad posible de JavaScript del hilo principal. De hecho, cuando se trata de utilizar Web Workers, sugiere:

Siempre debe utilizar Web Workers.

Los Web Workers son la forma principal de ejecutar JavaScript desde el hilo principal. Paul Lewis compara el problema con The 9am Rush Hour:

El peor momento del día para viajar. Para muchos, no es posible viajar en ningún otro momento del día porque necesitan llegar al trabajo a las 9 a. M.

Así es exactamente como se ve mucho código web hoy: todo se ejecuta en un solo hilo, el hilo principal, y el tráfico es malo. De hecho, es incluso más extremo que eso: hay un carril desde el centro de la ciudad hasta las afueras y, literalmente, todos están en la calle, incluso si no necesitan estar en la oficina a las 9 a. M.

También me gusta cómo Surma compara otros lenguajes en la forma en que a menudo llaman al “hilo principal” el “hilo de la interfaz de usuario”. Si lo que está haciendo está relacionado con la interfaz de usuario, hágalo en el hilo principal; si no es así, hágalo fuera del hilo principal. Se mete en esto en un buen episodio de The Web Platform Podcast – 194: Off the Main Thread. Pude ver que eso es un cambio positivo en la actitud y el pensamiento de los desarrolladores de JavaScript.

Un ejemplo de cómo sacar algo del hilo de la interfaz de usuario: gestión de estado.

David Gilbertson debe haber leído eso y escrito:

Recientemente vi un artículo que afirmaba que actualizar una tienda Redux era un buen candidato para los Web Workers porque no es un trabajo de interfaz de usuario (y el trabajo que no es de interfaz de usuario no pertenece al hilo principal). Pasar el procesamiento de datos a un hilo de trabajo suena sensato, pero la idea me pareció un poco, umm, académica.

Me parece que el punto principal de David es que algunas de las cosas importantes de JavaScript que debemos hacer son en respuesta a acciones iniciadas por el usuario en las que el usuario debe esperar a que las cosas terminen de todos modos, por lo que una IU que no responde durante ese tiempo está bien. . Pero para cualquier cosa que no sea iniciada por el usuario, y que demore más de, digamos, 100 ms, está de acuerdo en que un Web Worker es útil.

(Mirando eso de los 100ms, vale la pena señalar que un punto importante que está haciendo Surma es que el mundo está lleno de teléfonos de gama baja, y quién sabe qué son 100ms en un teléfono de gama alta cuando se traducen a un teléfono de gama baja. .)

El gran truco para sacar las cosas del hilo principal en JavaScript es usar Web Workers. No es un truco ni nada, los Web Workers son literalmente la API nativa para traer múltiples subprocesos en segundo plano a JavaScript. Al igual que en un Service Worker, normalmente se encuentran en otro archivo:

var myWorker = new Worker('worker.js');

Pero no tienen por qué serlo, puede incorporarlos o usar una lib. La API no es terrible, pero tampoco es sorprendente. Surma tiene una biblioteca para eso: Comlink.

La cruzada de Surma sobre esto es un esfuerzo a largo plazo. Fue una característica en la Cumbre de Chrome de 2018 con Una búsqueda para garantizar la capacidad de respuesta: programación de encendido y apagado del hilo principal y nuevamente en 2019 con El hilo principal está sobrecargado de trabajo y mal pagado, pero esta vez con casi seis veces las vistas en el momento de esta actualización :

Y no está solo. Aquí está Alex MacArthur sobre cómo ajustar su pensamiento sobre los controladores de eventos para adaptarse a hacer cosas fuera del hilo.

(Visited 12 times, 1 visits today)