Remixando un Symfony

This ad is not shown to multipass and full ticket holders
JSNation US
JSNation US 2025
November 17 - 20, 2025
New York, US & Online
See JS stars in the US biggest planetarium
Learn More
In partnership with Focus Reactive
Upcoming event
JSNation US 2025
JSNation US 2025
November 17 - 20, 2025. New York, US & Online
Learn more
Bookmark
Rate this content

A finales de 2020, realicé una prueba de Lighthouse en una página de contenido simple en Harvie, nuestra plataforma de gestión de granjas y aplicación Symfony, y obtuve una puntuación de rendimiento de 31/100. El paquete de JavaScript, las solicitudes de API, las consultas a la base de datos, incluso con una interfaz de usuario mínima para renderizar, tenían una puntuación base en los treinta. Junto con los comentarios de los clientes, esto ayudó a catalizar un compromiso renovado con el rendimiento en Harvie. A través de numerosas discusiones, recorrimos cada paso de la carga de la página, desde la conexión en red hasta el renderizado, e identificamos dónde podríamos mejorar. Después de un año de reescrituras y actualizaciones, nuestro último obstáculo para el rendimiento general era nuestro frontend. Habíamos estado convirtiendo nuestras plantillas de twig de Symfony en componentes de React SPA y caímos en el problema común de crear "cascadas de solicitudes", mientras nuestro usuario tenía que mirar una pantalla de carga. Necesitábamos un cambio, y para nosotros, eso fue Remix. En esta charla, te guiaré a través del viaje de nuestro equipo con el rendimiento y cómo Remix se ha convertido en una progresión natural de eso.

This talk has been presented at Remix Conf Europe 2022, check out the latest edition of this React Conference.

FAQ

Harvey es un servicio de entrega de comestibles que comenzó como un programa de agricultura apoyada por la comunidad (CSA), donde los clientes pagan anualmente a la granja y reciben productos locales regularmente. Ahora ha evolucionado a una tienda de comestibles completa, integrando granjas y productores locales en su plataforma.

Durante la pandemia, Harvey experimentó un aumento significativo tanto en clientes como en productores, ya que se convirtió en una fuente principal de comestibles para evitar tiendas físicas y ayudó a los productores que perdieron acceso a mercados físicos a mantenerse en negocio.

Anteriormente, Harvey permitía a los clientes personalizar sus cajas de productos desde un pequeño rango de opciones. Recientemente, se ha transformado en una tienda de comestibles completa, manejando más de 600 productos y cambiando su tecnología a una aplicación de una sola página con React para mejorar la experiencia del usuario.

Harvey enfrentó problemas de rendimiento significativos conforme creció, como tiempos de carga lentos y problemas de escalabilidad debido al aumento en la cantidad de productos y la transición a nuevas tecnologías como React, lo que llevó a la necesidad de rediseñar y optimizar la plataforma.

El equipo de Harvey adoptó varias estrategias para mejorar el rendimiento, incluyendo la optimización de imágenes, minimizar y diferir scripts de terceros, minimizar llamadas costosas a la API, y división de código más eficiente. Además, se realizó un rediseño de la página del catálogo para cargar productos por categoría y disminuir la cantidad de elementos cargados simultáneamente.

Remix es un framework que Emily Kaufman, ingeniera de software en Harvey, exploró para mejorar la carga de páginas en la plataforma. Ayudó a minimizar la cascada de solicitudes y a optimizar la carga de contenido necesario, lo que resultó en una mejora inmediata en el rendimiento de las nuevas páginas de comestibles.

Emily Kauffman
Emily Kauffman
19 min
18 Nov, 2022

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Esta charla analiza el viaje de rendimiento de Harvey y cómo condujo a la adopción de Remix. El equipo de ingeniería abordó problemas de escalabilidad y rendimiento a través de correcciones en el backend y mejoras en el frontend. El rediseño se centró en cargar productos por categoría y priorizar el rendimiento. La implementación de Remix resultó en una mejora en el rendimiento y una reducción en las solicitudes de API. El enfoque en la escalabilidad a largo plazo es esencial para manejar una lista de productos y una base de clientes en crecimiento.
Available in English: Remixing a Symfony

1. Harvey's Performance Journey

Short description:

¡Hola a todos, bienvenidos! Mi nombre es Emily Kaufman. Hoy hablaré sobre el viaje de rendimiento de Harvey y cómo nos llevó a usar Remix. Harvey comenzó como un programa de CSA, pero durante la pandemia se convirtió en una tienda de comestibles completa. Nos enfrentamos a problemas de crecimiento y rendimiento a pesar del cambio a React. La arquitectura subyacente no podía manejar la carga.

[♪ Música reproduciéndose ♪ ¡Hola a todos, bienvenidos! Mi nombre es Emily Kaufman. Soy una ingeniera de software con sede en Pittsburgh, Pensilvania. De hecho, di esta charla en la- fui una oradora suplente en la primera conferencia de Remix, así que si ya la viste, esto puede sonar bastante familiar. Pero mi charla de hoy tratará sobre el viaje de rendimiento que ha experimentado Harvey, la empresa donde trabajo, en los últimos años y cómo eso finalmente nos llevó a Remix.

Muy bien, Harvey es un servicio de entrega de comestibles, donde todos nuestros productos provienen de granjas y productores locales. Así que comenzó, creo que hace unos diez años, como un programa de agricultura apoyada por la comunidad, si estás familiarizado con eso. Es un CSA. Básicamente, pagas a la granja una cierta cantidad de dinero al año y luego cada semana o cada dos semanas, recibes una caja con lo que hayan producido en ese tiempo. Es una forma realmente excelente de apoyar a los productores y granjas locales. Entonces, lo que hizo Harvey es proporcionar una plataforma para que realmente pudieras personalizar lo que recibías en tu caja. Hasta hace unos tres años, dos años y medio, eso era todo lo que hacía Harvey. Teníamos varias granjas en la plataforma de diferentes lugares y proporcionábamos la forma para que los clientes ingresaran, vieran el contenido de su caja, hicieran adiciones si querían cambiar cosas y luego esperaran su entrega.

Y luego llegó la pandemia. Entonces, tal vez recuerdes que al principio el mundo comenzaba a cerrarse. Muchas personas en el área de Pittsburgh recurrieron a Harvey como su principal fuente de comestibles, para evitar tener que ir a una tienda de comestibles. Y por otro lado, todos estos productores que solían ir a mercados de agricultores, instalar puestos en algún lugar para que pudieras venir y hacer compras, ya no tenían realmente un lugar adonde ir. Así que comenzaron a unirse a Harvey como productores para poder mantenerse en el negocio. Entonces, como puedes imaginar, tuvimos esta gran afluencia tanto de clientes como de productores y Harvey comenzó a crecer y evolucionar desde este programa de CSA hasta convertirse en una tienda de comestibles completa.

Por supuesto, durante cualquier tipo de crecimiento a gran escala en un corto período de tiempo como este, vas a experimentar algunos problemas de crecimiento y nosotros definitivamente los tuvimos. Esta es una prueba de Lighthouse que realicé a finales de 2020, y era simplemente una página de contenido simple en Harvey, que es una aplicación Symfony, y obtuvimos esta puntuación de rendimiento. Este era el paquete de JavaScript, las solicitudes a la API, las consultas a la base de datos, incluso con la interfaz de usuario mínima para renderizar en esta página de contenido básica, teníamos una puntuación base en los 30. Así que esto no estaba correcto. Algo no cuadraba. Esto, junto con algunos clientes molestos, algunos comentarios de los clientes, ayudó a catalizar este renovado interés y compromiso con el rendimiento en Harvey. La página del catálogo, donde puedes ver todos los productos, se había convertido recientemente, creo que un año antes de eso, de la combinación Symfony, jQuery, Twig en parte de una nueva aplicación de una sola página de React. Y esto fue lo más afectado. El cambio a React abordó muchas preocupaciones de experiencia de usuario que teníamos. Modernizó nuestra pila tecnológica, pero aún se quedaba corto en términos de rendimiento. Así que la arquitectura subyacente simplemente no podía manejar el peso de todos los nuevos productos. Tomaba varios segundos agregar algo a tu carrito o quitar algo o hacer un intercambio.

2. Fixes for Scaling and Performance

Short description:

Muchos miembros abandonaban el sitio debido a problemas de escalabilidad causados por el aumento significativo de productos ofrecidos. El equipo de ingeniería clasificó los problemas en soluciones rápidas, correcciones involucradas y planes de rediseño futuro. La infraestructura y la red fueron manejadas principalmente por servicios y herramientas. Las correcciones en el backend incluyeron la optimización de imágenes, el almacenamiento en caché y la actualización de puntos finales y consultas a la base de datos. Las mejoras en el frontend se centraron en reducir el tamaño del paquete y eliminar paquetes de localización innecesarios.

Y así, muchos miembros simplemente abandonaban por completo el sitio. Pero debemos recordar que hemos pasado de ofrecer quizás 30 a 40 productos hace un par de años a probablemente más de 600 en este momento. Y por lo tanto, la página simplemente no se estaba escalando correctamente. Entonces, cuando pensamos en soluciones para esto, nuestra primera iteración fue una especie de modo de crisis. Nuestro equipo de ingeniería se reunió y nos preguntamos qué podíamos hacer a corto plazo para solucionar algunos de estos problemas.

Así que pasamos unas horas sentados alrededor del panel de red en la pestaña de performance y revisamos cada paso de la carga de la página y organizamos lo que vimos en algunos grupos según quién los resolvería realmente. Así que teníamos DevOps y redes. Teníamos el backend, que incluía la API y la database, y luego teníamos el frontend. A partir de ahí, tomamos lo que encontramos y clasificamos esto en soluciones rápidas y fáciles, correcciones involucradas, y esto podría ser parte de un rediseño futuro.

Para DevOps y redes, no tuvimos que hacer mucho aquí porque en su mayoría eran manejados por servicios y tooling. Pero valió la pena sentarse y revisarlo y asegurarnos de que no hubiera cuellos de botella. Para la API del backend, tuvimos varios problemas con la carga de imágenes en el sitio. Tenemos un banner principal en casi todas nuestras páginas, y por alguna razón tardaba como siete segundos en cargarse y parecía bloquear la primera pintura. Así que hicimos mucho trabajo en torno a la optimization de imágenes y el almacenamiento en caché, y eso redujo segundos reales en el tiempo de carga de nuestra página. No puedo hablar de todo lo que hicieron mis compañeros de backend, pero las correcciones más involucradas incluyeron la actualización de los puntos finales y las consultas a la database para asegurarnos de que solo estamos consultando lo mínimo necesario, tratando de evitar operaciones innecesarias y computacionalmente costosas. Un ejemplo de esto es cualquier cosa que tenga que pasar por un proveedor externo. Por ejemplo, si estuviéramos verificando la información de la tarjeta de crédito de un usuario, podríamos hacer esto solo en una o dos páginas. Entonces no debería estar en un componente de nivel superior como el diseño principal porque entonces estaría sucediendo mucho más de lo necesario. En general, todas estas actualizaciones surgieron simplemente porque nos sentamos como equipo y nos quedamos mirando el panel de desarrollo durante unas horas e identificamos problemas.

Para el frontend, también conocido como mi problema, porque soy el único desarrollador frontend en Harvey, esto es cuánto tiempo tarda en descargar el contenido, qué tan grande es el script, testing conexiones más lentas y todo eso. Identificamos varias soluciones fáciles que sabíamos que requerirían un esfuerzo de desarrollo relativamente pequeño pero que aumentarían drásticamente la experiencia del usuario. Así que comenzamos por ahí. Por un lado, el paquete era simplemente demasiado grande, era demasiado grande. Había tanto código que un usuario tenía que descargar antes de poder interactuar con la página. Y utilizamos el plugin Webpacks. Utilizamos el plugin Webpacks Bundle Analyzer, si estás familiarizado con él, y esto nos ayudó a identificar muchas áreas problemáticas que pudimos abordar. Una de ellas fue nuestro uso de paquetes de localización de Moment.js. Así que estamos principalmente en el área de Pittsburgh. Tenemos granjas en todo el país, pero principalmente en los Estados Unidos. Entonces había muchos paquetes de localización que no eran realmente relevantes para nosotros en este momento, así que los eliminamos, estableciendo el objetivo de cambiar eventualmente a algo diferente que no sea Moment.

3. Mejoras de rendimiento en el frontend

Short description:

Revisé todas las dependencias en el package.json y eliminé las innecesarias. Teníamos una gran cantidad de elementos en la página de catálogo, lo que causaba problemas de rendimiento. Agregamos carga perezosa y dividimos nuestro código en proyectos separados para reducir el tamaño del paquete. La compresión de texto y la minimización de scripts de terceros también tuvieron un efecto positivo. Mover las llamadas costosas a la API mejoró la carga de la página y las interacciones.

Revisé todas las dependencias en el package.json y traté de entender por qué estaban allí, si aún eran necesarias, si podían actualizarse. Y pudimos eliminar una buena cantidad de ellas.

Así que tengo esta captura de pantalla divertida y estresante de la pestaña de performance. Esta es nuestra página de catálogo. Uno de los mayores problemas que teníamos en el frontend, especialmente en la página de catálogo, era simplemente la gran cantidad de elementos que teníamos. Como dije antes, en un momento dado, tal vez teníamos 40 tarjetas de productos, cada una con una imagen y algunos botones, ya sabes, cosas normales de comercio electrónico. Y ahora tenemos casi 600. Entonces, incluso sin todas las optimizaciones que estamos haciendo ahora, hace dos años, esta página funcionaba perfectamente, funcionaba bien. Porque recuerda, Harvey nunca fue pensado para ser más grande que un pequeño programa de CSA. Entonces, una de las primeras cosas que hicimos aquí, después de ver esto, fue agregar carga perezosa a la página, y de inmediato dejó de bloquearse, lo cual tiene sentido. Pero puedes ver en la captura de pantalla que básicamente estamos tratando de cargar 500 imágenes a la vez.

OK, no me adentraré demasiado en todo lo que hicimos en el frontend, porque solo tengo 20 minutos, pero tengo una lista no exhaustiva aquí. Mejor división de código. Esto podría incluso ser una división de código más reflexiva. Realmente tomarse el tiempo para pensar en qué necesita cargarse realmente en cada ruta. Entonces, con nuestra aplicación de una sola página, no dedicamos mucho tiempo a considerar qué modules realmente necesitaban estar en cada página. Entonces, una de las cosas que esto llevó a hacer fue dividir nuestro código de miembro y administrador en dos proyectos separados con sus propias compilaciones, y luego hice una biblioteca de componentes donde ambos podían compartir. Entonces eso redujo mucho el tamaño del paquete. Comenzamos a usar compresión de texto. Agregamos esto a todos nuestros archivos de JavaScript. Y creo que nuestro CSS usando Gzip, y eso tuvo un efecto positivo. Minimizar y diferir scripts de terceros. A veces esto puede parecer una batalla constante con el marketing. Esto incluye cosas como Zendesk, Hotjar, Analytics, cualquier cosa que, ya sabes, tal vez el marketing esté usando para rastrear eventos en tu sitio web. Entonces revisamos esto y nos aseguramos de que todos los que estábamos usando todavía fueran necesarios, e intentamos identificar lugares donde pudiéramos diferirlos cuando fuera posible. Minimizar llamadas costosas a la API. Toqué esto antes, pero mucho de esto fue simplemente mover dónde estábamos haciendo estas llamadas, fuera de un diseño y dentro de un componente o una ruta. Solo para que no se hicieran todas en cada página. Entonces todos estos cambios que mencioné llevaron a una diferencia sustancial en términos de carga de página, y especialmente en dispositivos móviles. Y ayudaron en cierta medida con las interacciones de la página después de la carga, como agregar, eliminar, intercambiar elementos de la tarjeta.

4. Rediseño y Compromiso con el Rendimiento

Short description:

Nuestro rediseño se centró en cargar productos por categoría en lugar de cargar cada producto individual en la página. Movimos partes de la tarjeta de producto a una página de detalles y eliminamos funcionalidades que no aportaban suficiente valor para el cliente. Este compromiso con el rendimiento como un principio de diseño esencial llevó a un diseño más ligero. Aunque el rediseño mejoró el tiempo de carga, la puntuación de Lighthouse se mantuvo baja. A principios de 2020, compré una licencia de Remix.

Pero sabíamos que nuestro diseño actual simplemente no iba a soportar el nuevo modelo de negocio, el modelo de supermercado más grande que estábamos tratando de lograr. Y así sabíamos que era hora de un rediseño.

Una cosa que hicimos, esta es nuestra página rediseñada aquí. En lugar de cargar cada producto individual en la página, los cargamos por categoría. Así que ya no teníamos tantos elementos en la página. Una nota divertida sobre esto, sin embargo. Nuestras categorías están creciendo lo suficiente como para que ahora estemos empezando a considerar la paginación o algo así, debido al crecimiento.

Eliminamos partes de la tarjeta de producto, la descripción, la información del productor, y las movimos a una página de detalles para que no tuviéramos que cargar todas esas cosas para cada producto en el catálogo. Generamos múltiples tamaños de imagen para cada una de ellas, así que teníamos una miniatura, que puedes ver en la parte inferior de esta imagen aquí. Teníamos una vista de detalles, que es esta más grande, la vista de tarjeta, y coincidían con cómo se mostrarían en la página. Eliminamos algunas funcionalidades, como el botón de intercambio. Solíamos tenerlo para que, si estabas en tu carrito de compras, pudieras intercambiar. Por ejemplo, si no querías brócoli, podías cambiarlo por zanahorias. Pero simplemente no estaba aportando suficiente valor para el cliente para el problema de rendimiento que estaba causando, así que decidimos deshacernos de él.

Y eso llevó a esta forma de pensar. Como cuando incluyes un compromiso con el rendimiento como un principio esencial del diseño, entonces cuando estás pensando en el rendimiento cada vez que estás construyendo una nueva funcionalidad, el diseño se volverá más ligero. Así que me encuentro haciendo esto mucho. Entonces diremos, oh, deberíamos agregar esto al sitio. Esto haría esto. Sería realmente genial. Y luego nos damos cuenta de que va a haber un impacto en el rendimiento. Y es como, ¿realmente vale la pena agregar tanto tiempo a la carga de las páginas? ¿Vale la pena recibir ese golpe? Y muchas veces la respuesta es no.

Bien, veamos si esto carga. Así que nuestra página rediseñada estará a la izquierda y la página existente estará a la derecha. La página rediseñada se carga considerablemente más rápido que la página existente. Pero aún no es suficiente. Quería deshacerme de todos los indicadores de carga. Y a pesar de que nuestro tiempo de carga era mucho mejor, nuestra puntuación de Lighthouse seguía siendo bastante baja, lo cual fue sorprendente.

Bien, vamos a remix. A principios de 2020, me compré una licencia de remix como regalo de cumpleaños para mí mismo.

5. El Poder de Remix para el Rendimiento

Short description:

He estado probando Remix en proyectos de hobby y me di cuenta de su potencial para resolver nuestros problemas de rendimiento. Implementamos con éxito Remix en nuestras nuevas páginas de comestibles, lo que resultó en un mejor rendimiento. Remix minimiza la cascada de solicitudes, reduciendo las solicitudes de API y mejorando la experiencia del usuario. Planeamos migrar más páginas a Remix y priorizar el rendimiento y la escalabilidad en todos nuestros lanzamientos. Nuestras listas de productos en crecimiento y nuestra base de clientes requieren un enfoque en la escalabilidad a largo plazo.

Y he estado probándolo en varios proyectos de hobby, simplemente testing lo que podría hacer y en general pasando un buen rato. Fue para mí. Y me di cuenta de que la colocación de las solicitudes de carga de página con los componentes, con el diseño, podría ayudarnos a salir de este problema de giro nuevamente que estamos teniendo, como lo llama el equipo de remix. Así que todavía no tengo nada desplegado públicamente, por mucho que quiera, pero pude poner en marcha nuestras nuevas páginas de comestibles con remix. Y creo que los resultados hablan por sí mismos.

Ejecuté este informe de Lighthouse solo para tener una idea de si, sabes, va a marcar alguna diferencia para nosotros. Y sí, puedes verlo. Entonces, uno de los puntos fuertes de remix es que minimiza la cascada de solicitudes. Y ese fue el caso para nosotros en algunas partes de la aplicación. Estábamos haciendo múltiples solicitudes de API al cargar la página y simplemente teníamos ese spinner en la interfaz de usuario. Veamos este video. ¿Está reproduciéndose? Lo haré de nuevo. Tan rápido. Ahí vamos.

Bien, este video está ligeramente sesgado porque la aplicación existente tiene más integraciones de terceros como un widget de soporte y algunas características más en general. Pero aún puedes ver esa segunda ola de solicitudes que se dispararon en los efectos de uso en el componente. Así que eso es en nuestra página existente. Si cambio a Remix, esta es la misma cascada pero en la versión de Remix. Entonces, en la versión de Remix, tenemos un tiempo de carga de documento más largo pero un número mínimo de solicitudes adicionales. Y como solo cargamos lo necesario para esa página, este JavaScript que se carga es mucho más pequeño. Así que todo esto sin aprovechar al máximo algunas de las características como el enrutamiento anidado en el que estamos empezando a trabajar ahora. Pero sí, fue una mejora inmediata para nosotros. Fue realmente emocionante.

Entonces, en el futuro, nuestro plan es seguir moviendo estas páginas existentes que actualmente están en nuestro código orientado a los miembros a nuestra aplicación de Remix hasta llegar a un punto en el que tengamos suficiente para implementarlo y que sea público. Pero el uso del framework se ha convertido en una progresión natural de nuestro viaje de performance en Harvey, y definitivamente ha valido la pena el esfuerzo, y ayuda que realmente disfruto trabajando en él. Entonces, si hemos aprendido algo en los últimos dos años, es que el rendimiento y la construcción para la escala no son negociables cuando estamos lanzando nuevas características. Tiene que estar integrado en todo lo que hacemos y verificar constantemente si hay regresiones. Entonces, nuestras listas de productos, nuestra base de clientes, siguen creciendo a un ritmo rápido. Y sí, tengo confianza en que lo que estamos haciendo ahora va a respaldar cómo se ve el negocio tal vez dentro de cinco a diez años. Así que es un momento emocionante. Muy bien. Gracias por escuchar. Nuevamente, mi nombre es Emily Kaufman. Si tienes alguna pregunta, puedes encontrarme en Twitter o puedes leer la publicación del blog detrás de esta presentación en mi sitio web. Así que gracias.

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.
Construyendo Mejores Sitios Web con Remix
React Summit Remote Edition 2021React Summit Remote Edition 2021
33 min
Construyendo Mejores Sitios Web con Remix
Top Content
Remix is a web framework built on React Router that focuses on web fundamentals, accessibility, performance, and flexibility. It delivers real HTML and SEO benefits, and allows for automatic updating of meta tags and styles. It provides features like login functionality, session management, and error handling. Remix is a server-rendered framework that can enhance sites with JavaScript but doesn't require it for basic functionality. It aims to create quality HTML-driven documents and is flexible for use with different web technologies and stacks.
No resuelvas problemas, elimínalos
React Advanced 2021React Advanced 2021
39 min
No resuelvas problemas, elimínalos
Top Content
Kent C. Dodds discusses the concept of problem elimination rather than just problem-solving. He introduces the idea of a problem tree and the importance of avoiding creating solutions prematurely. Kent uses examples like Tesla's electric engine and Remix framework to illustrate the benefits of problem elimination. He emphasizes the value of trade-offs and taking the easier path, as well as the need to constantly re-evaluate and change approaches to eliminate problems.
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.
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
Uso de CodeMirror para construir un editor de JavaScript con Linting y AutoCompletado
React Day Berlin 2022React Day Berlin 2022
86 min
Uso de CodeMirror para construir un editor de JavaScript con Linting y AutoCompletado
Top Content
Workshop
Hussien Khayoon
Kahvi Patel
2 authors
Usar una biblioteca puede parecer fácil a primera vista, pero ¿cómo eliges la biblioteca correcta? ¿Cómo actualizas una existente? ¿Y cómo te abres camino a través de la documentación para encontrar lo que quieres?
En esta masterclass, discutiremos todos estos puntos finos mientras pasamos por un ejemplo general de construcción de un editor de código usando CodeMirror en React. Todo mientras compartimos algunas de las sutilezas que nuestro equipo aprendió sobre el uso de esta biblioteca y algunos problemas que encontramos.
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
Workshop
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
Fundamentos de Remix
React Summit 2022React Summit 2022
136 min
Fundamentos de Remix
Top Content
Workshop
Kent C. Dodds
Kent C. Dodds
Construir aplicaciones web modernas está lleno de complejidad. Y eso solo si te molestas en lidiar con los problemas
¿Cansado de conectar onSubmit a las API del backend y asegurarte de que tu caché del lado del cliente se mantenga actualizada? ¿No sería genial poder utilizar la naturaleza global de CSS en tu beneficio, en lugar de buscar herramientas o convenciones para evitarla o trabajar alrededor de ella? ¿Y qué te parecería tener diseños anidados con una gestión de datos inteligente y optimizada para el rendimiento que simplemente funciona™?
Remix resuelve algunos de estos problemas y elimina completamente el resto. Ni siquiera tienes que pensar en la gestión de la caché del servidor o en los conflictos del espacio de nombres global de CSS. No es que Remix tenga APIs para evitar estos problemas, simplemente no existen cuando estás usando Remix. Ah, y no necesitas ese enorme y complejo cliente graphql cuando estás usando Remix. Ellos te tienen cubierto. ¿Listo para construir aplicaciones más rápidas de manera más rápida?
Al final de esta masterclass, sabrás cómo:- Crear Rutas de Remix- Estilizar aplicaciones de Remix- Cargar datos en los cargadores de Remix- Mutar datos con formularios y acciones
Testing Web Applications Using Cypress
TestJS Summit - January, 2021TestJS Summit - January, 2021
173 min
Testing Web Applications Using Cypress
Top Content
Workshop
Gleb Bahmutov
Gleb Bahmutov
Esta masterclass te enseñará los conceptos básicos para escribir pruebas end-to-end útiles utilizando Cypress Test Runner.
Cubriremos la escritura de pruebas, cubriendo cada característica de la aplicación, estructurando pruebas, interceptando solicitudes de red y configurando los datos del backend.
Cualquiera que conozca el lenguaje de programación JavaScript y tenga NPM instalado podrá seguir adelante.