Web Workers: Manejo de Procesamiento Pesado en el Lado del Cliente

Rate this content
Bookmark

En esta charla, presentaré una visión general de cómo manejamos procesos grandes en el lado del cliente (aplicaciones web) utilizando una API web llamada Web Worker. Voy a presentar un caso de uso en el que tuve que aplicar web workers y las ventajas que trajo en el procesamiento pesado, llamado "Rinha Front end" en Brasil, un desafío donde tuvimos que procesar archivos Json de varios tamaños solo usando el lado del cliente y sin afectar la experiencia del usuario y bloqueando el uso de la aplicación.
Así que en esta charla presentaré un caso simple usando Javascript puro y cómo usar Web Workers para procesar fuera del hilo principal y bloquear nuestras interacciones con la página. Crearemos una aplicación simple usando vanilla JS y les presentaré esta característica.

This talk has been presented at JSNation US 2024, check out the latest edition of this JavaScript Conference.

Kevin Uehara
Kevin Uehara
18 min
21 Nov, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
En esta charla, el orador presenta web workers y discute cómo pueden manejar un procesamiento grande en el lado del cliente. Se proporcionan ejemplos, benchmarks y compensaciones. Se discuten los beneficios de usar web workers, y se muestra un proyecto de demostración usando VanillaJS y la extensión de servidor en vivo de VS Code. El orador demuestra cómo usar web workers para evitar que el hilo principal se bloquee durante operaciones grandes. Se explica el proceso de crear un archivo de web worker y mover funciones a él. El orador también muestra cómo manejar mensajes y realizar operaciones con web workers. Las observaciones finales incluyen información de contacto y una invitación a visitar el canal de YouTube del orador para cursos y artículos de React.

1. Introducción a WebWorkers

Short description:

En esta charla, voy a introducir web workers y cómo pueden manejar grandes procesos en el lado del cliente. Proporcionaré ejemplos, mostraré benchmarks y discutiré las compensaciones. Crearemos una aplicación tanto con como sin WebWorkers para comparar el rendimiento.

Y hola a todos, mi nombre es Kevin Wehara, y antes que nada, estoy muy feliz de estar aquí participando en la edición JS Nation West, y estoy muy contento de estar aquí y muchas gracias por ver mi presentación. Y hoy estoy aquí para hablar sobre web workers y cómo podemos manejar grandes procesos en el lado del cliente. Así que en esta charla, quiero presentarles qué es un web worker. OK, comencemos.

Y como dije antes, mi nombre es Kevin Wehara, soy ingeniero de personal en iFood. Voy a hablar sobre iFood en las próximas diapositivas. Pero estoy aquí en Brasil, soy un MVP de Microsoft, orador y creador de contenido tecnológico en YouTube, pueden encontrarme allí. Soy organizador de Prochain Campinas. Prochain es un evento Prochain aquí en Campinas. Campinas es la ciudad donde vivo hoy. Soy colaborador de NodeBR y GDG Campinas. NodeBR es Node Brasil, y GDG es Google Developer Group. OK. Y soy de Brasil, Sao Paolo, y uno de mis pasatiempos es jugar CS2, pero soy muy malo y me rindo. Soy desarrollador de software desde hace alrededor de nueve años y me enfoco en el front desde hace alrededor de cinco años. Y estoy familiarizado con un buen TypeScript. Algunas curiosidades sobre mí. Y trabajo en el rival de Logística de iFood. iFood es la empresa de entrega de comida más grande aquí en Brasil hoy. Trabajo en ubicación, ubicación es el nombre de mi equipo. Además de otros proyectos internos aquí, el contexto en el que trabajo hoy es geoprocesamiento, geolocalización, áreas de entrega de socios, rutas de entrega, y mucho más. OK.

Entonces, ¿de qué voy a hablar y qué voy a cubrir en esta charla? Quiero presentarles qué es WebWorker. Quiero mostrar algunos ejemplos con el código mostrado y las manos en el código. Así que veamos algunos ejemplos y veamos el benchmark, las compensaciones. Veamos los resultados. Y terminemos con el contexto de mi contexto. Así que la visión general de la aplicación, vamos a crear una aplicación sin usar WebWorkers y luego vamos a implementarla y visualizar el rendimiento de la aplicación. OK, así que vamos a crear una aplicación con WebWorkers y otra sin WebWorkers. OK, así que con estas dos aplicaciones, vamos a comparar y ver esos resultados con el benchmark.

2. WebWorkers and Demo Project

Short description:

Los WebWorkers son mecanismos que permiten que operaciones, usualmente cálculos más grandes o enormes operaciones, se ejecuten desde el hilo principal, asegurando que el hilo principal no se bloquee. Mostraré ejemplos y discutiré los beneficios de usar WebWorkers. He escrito un artículo en dev.io sobre WebWorkers, que puedes encontrar buscando Kevin O'Hara o introduciendo JavaScript WebWorkers. Continuemos con el proyecto de demostración usando VanillaJS y la extensión live server de VS Code.

OK, entonces, ¿qué es WebWorker? El WebWorker es una API proporcionada por el navegador por defecto. Sabemos que JavaScript en sí mismo es de un solo hilo sin entrar en los méritos de Node.js con libuv. Sin embargo, con el bucle de imagen, consulta de devolución de llamada, arquitectura de pila, podemos decir que JavaScript puede manejar un proceso sincrónico bajo demanda. ¿OK? Y el navegador ofrece una serie de APIs que pueden ser utilizadas por los equipos de desarrollo. Por ejemplo, almacenamiento es como almacenamiento de sesión y almacenamiento local, DB indexada, workers, PWA, monitoreo de rendimiento, monitoreo de rendimiento, lo siento, lighthouse. Y uno de los temas que quiero abordar en esta charla es WebWorker y cómo viven, cómo sobreviven, cómo se reproducen. Estoy bromeando. Pero ¿por qué usar, cuáles son los beneficios de usar WebWorkers? OK, cuándo usar y cuándo no usar. Así que los WebWorkers son mecanismos que permiten operaciones, usualmente cálculos más grandes o enormes operaciones para ser ejecutadas desde el hilo principal, asegurando que el hilo principal no se bloquee. Y lo que quiero es que una función realice cierto procesamiento pesado que bloqueará la integración de la página, la UI. Para ser más claro, voy a mostrar algunos ejemplos, ¿OK? Y antes de mostrar el ejemplo, quiero decir que escribí este artículo sobre WebWorkers y lo puedes encontrar en dev.io. Así que solo en este artículo, profundicé en este concepto. Así que puedes encontrarlo en dev.io, buscando por Kevin O'Hara o buscando por introduciendo JavaScript WebWorkers, ¿OK? Así que continuemos. Solo muéstrame el código, la mejor parte. OK. Así que para proyectos de demostración, no usaré ningún framework o librería, por ejemplo, React, Angular, Vue, Velt. Solo voy a usar VanillaJS, OK, el JavaScript puro. Y para hacer esto, voy a crear nuestro espacio de trabajo con los siguientes archivos, el index.html, el index.js, y nuestro estilo, OK, CSS. Así que aquí, estos son nuestros archivos. Así que en principio, no prestes atención a este código aquí. Quiero mostrarte esta extensión aquí, el live server. OK. El live server es una extensión de VS Code. Así que puedes instalarla solo para usar un servidor en tus hosts locales y tenemos las recargas en caliente y esto va a facilitar nuestras vidas, ¿OK? Así que el HTML aquí es muy, muy simple. Así que aquí, tenemos nuestra importación con nuestro estilo, el script con el index.js. Estoy usando una importación async. Y aquí, tengo estos tres elementos el botón para iniciar una operación grande y el segundo botón cambiará el color de fondo. Y aquí, tengo esta etiqueta tres solo para la salida, ¿OK?, el tiempo del procesamiento, ¿OK?.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Una Guía del Comportamiento de Renderizado de React
React Advanced 2022React Advanced 2022
25 min
Una Guía del Comportamiento de Renderizado de React
Top Content
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
Escalando con Remix y Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Escalando con Remix y Micro Frontends
Top Content
This talk discusses the usage of Microfrontends in Remix and introduces the Tiny Frontend library. Kazoo, a used car buying platform, follows a domain-driven design approach and encountered issues with granular slicing. Tiny Frontend aims to solve the slicing problem and promotes type safety and compatibility of shared dependencies. The speaker demonstrates how Tiny Frontend works with server-side rendering and how Remix can consume and update components without redeploying the app. The talk also explores the usage of micro frontends and the future support for Webpack Module Federation in Remix.
Acelerando tu aplicación React con menos JavaScript
React Summit 2023React Summit 2023
32 min
Acelerando tu aplicación React con menos JavaScript
Top Content
Mishko, the creator of Angular and AngularJS, discusses the challenges of website performance and JavaScript hydration. He explains the differences between client-side and server-side rendering and introduces Quik as a solution for efficient component hydration. Mishko demonstrates examples of state management and intercommunication using Quik. He highlights the performance benefits of using Quik with React and emphasizes the importance of reducing JavaScript size for better performance. Finally, he mentions the use of QUIC in both MPA and SPA applications for improved startup performance.
Enrutamiento en React 18 y más allá
React Summit 2022React Summit 2022
20 min
Enrutamiento en React 18 y más allá
Top Content
Routing in React 18 brings a native app-like user experience and allows applications to transition between different environments. React Router and Next.js have different approaches to routing, with React Router using component-based routing and Next.js using file system-based routing. React server components provide the primitives to address the disadvantages of multipage applications while maintaining the same user experience. Improving navigation and routing in React involves including loading UI, pre-rendering parts of the screen, and using server components for more performant experiences. Next.js and Remix are moving towards a converging solution by combining component-based routing with file system routing.
Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia
React Advanced 2021React Advanced 2021
47 min
Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia
Top Content
The Talk discusses the balance between flexibility and consistency in design systems. It explores the API design of the ActionList component and the customization options it offers. The use of component-based APIs and composability is emphasized for flexibility and customization. The Talk also touches on the ActionMenu component and the concept of building for people. The Q&A session covers topics such as component inclusion in design systems, API complexity, and the decision between creating a custom design system or using a component library.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.

Workshops on related topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured Workshop
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Domina los Patrones de JavaScript
JSNation 2024JSNation 2024
145 min
Domina los Patrones de JavaScript
Top Content
Featured Workshop
Adrian Hajdin
Adrian Hajdin
Durante esta masterclass, los participantes revisarán los patrones esenciales de JavaScript que todo desarrollador debería conocer. A través de ejercicios prácticos, ejemplos del mundo real y discusiones interactivas, los asistentes profundizarán su comprensión de las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables. Al final de la masterclass, los participantes ganarán una nueva confianza en su capacidad para escribir código JavaScript de alta calidad que resista el paso del tiempo.
Puntos Cubiertos:
1. Introducción a los Patrones de JavaScript2. Patrones Fundamentales3. Patrones de Creación de Objetos4. Patrones de Comportamiento5. Patrones Arquitectónicos6. Ejercicios Prácticos y Estudios de Caso
Cómo Ayudará a los Desarrolladores:
- Obtener una comprensión profunda de los patrones de JavaScript y sus aplicaciones en escenarios del mundo real- Aprender las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables- Mejorar las habilidades de resolución de problemas y la legibilidad del código- Mejorar la colaboración y la comunicación dentro de los equipos de desarrollo- Acelerar el crecimiento de la carrera y las oportunidades de avance en la industria del software
IA a demanda: IA sin servidor
DevOps.js Conf 2024DevOps.js Conf 2024
163 min
IA a demanda: IA sin servidor
Top Content
Featured WorkshopFree
Nathan Disidore
Nathan Disidore
En esta masterclass, discutimos los méritos de la arquitectura sin servidor y cómo se puede aplicar al espacio de la IA. Exploraremos opciones para construir aplicaciones RAG sin servidor para un enfoque más lambda-esque a la IA. A continuación, nos pondremos manos a la obra y construiremos una aplicación CRUD de muestra que te permite almacenar información y consultarla utilizando un LLM con Workers AI, Vectorize, D1 y Cloudflare Workers.
React Patterns Made Simple
React Day Berlin 2024React Day Berlin 2024
62 min
React Patterns Made Simple
Top Content
Featured Workshop
Adrian Hajdin
Adrian Hajdin
Aprende patrones de React ampliamente utilizados, incluyendo HOCs, Compound Components, Provider Patterns, Functions as Child, y Portals, para escribir código más limpio y eficiente y crear aplicaciones escalables y mantenibles.Visión general En esta masterclass, los espectadores aprenderán sobre patrones clave de React que pueden hacer su código más eficiente, legible y mantenible. Presentaremos cada patrón, explicaremos cómo funciona y demostraremos ejemplos prácticos. Al final de la sesión, los participantes tendrán una comprensión sólida de cómo usar estos patrones en sus proyectos.Objetivos de aprendizajeHOCs Compound Components Provider Patterns Functions as Child Portals Modularidad Mantenibilidad Aplicación en el mundo real.
Next.js 13: Estrategias de Obtención de Datos
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Estrategias de Obtención de Datos
Top Content
WorkshopFree
Alice De Mauro
Alice De Mauro
- Introducción- Prerrequisitos para la masterclass- Estrategias de obtención: fundamentos- Estrategias de obtención – práctica: API de obtención, caché (estática VS dinámica), revalidar, suspense (obtención de datos en paralelo)- Prueba tu construcción y sírvela en Vercel- Futuro: Componentes de servidor VS Componentes de cliente- Huevo de pascua de la masterclass (no relacionado con el tema, destacando la accesibilidad)- Conclusión