Aplicaciones Web de Alta Velocidad: Más Allá de lo Básico

Rate this content
Bookmark

Saber cómo ejecutar pruebas de rendimiento en tu aplicación web correctamente es una cosa, y poner esos métricas en buen uso es otra. Y ambos aspectos son cruciales para el éxito general de tus esfuerzos de optimización de rendimiento. Sin embargo, puede ser todo un desafío a veces, ya que significa que necesitas tener un entendimiento preciso de todos los entresijos tanto de los datos de rendimiento como de las herramientas de rendimiento. Esta charla arrojará luz sobre cómo superar este desafío y te guiará a través de las trampas y trucos del oficio de Chrome DevTools, proporcionándote una hoja de ruta completa para el análisis y la optimización del rendimiento.

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

FAQ

La Prioridad de Fetch es una característica en Chrome DevTools que permite determinar qué solicitudes HTTP tienen más prioridad sobre otras. Esta funcionalidad puede ser utilizada para optimizar la carga y el rendimiento de las páginas web, asegurando que los recursos más críticos se carguen primero.

Puedes mejorar el tiempo de conexión en Chrome DevTools utilizando el atributo pre-connect en tus enlaces. Esto le indica al navegador que establezca una conexión con ciertos endpoints de API al inicio de la carga de la aplicación, lo que puede reducir significativamente los tiempos de conexión posteriores.

Una tarea larga en la pestaña de rendimiento de Chrome DevTools es aquella que tarda más de 50 milisegundos y puede bloquear el procesamiento de la entrada del usuario. Se identifica por un área roja o un triángulo rojo en el gráfico de la pestaña de rendimiento, indicando que la tarea está tomando demasiado tiempo y afectando la interactividad.

Los flujos de usuario son una herramienta en Chrome DevTools que permite medir el rendimiento en tiempo de ejecución de un usuario en un sitio web de formas nuevas. Esta funcionalidad es útil para entender cómo interactúan los usuarios con tu sitio y optimizar su experiencia basándose en datos de rendimiento reales.

La visibilidad de contenido es una característica de CSS que puedes utilizar para optimizar el rendimiento en Chrome. Permite especificar qué partes del contenido deben tener prioridad en la carga y cuáles pueden ser pospuestas, mejorando así los tiempos de carga y la experiencia del usuario.

Para reducir el tiempo total de bloqueo en Chrome DevTools, puedes aplicar técnicas como fragmentar tareas largas en varias más cortas, usar el scheduling del trabajo en el hilo principal y optimizar scripts con atributos como defer, preload o prefetch. Estos cambios pueden mejorar significativamente la interactividad y la velocidad de tu sitio web.

Michael Hladky
Michael Hladky
30 min
20 Jun, 2022

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Esta charla cubre las últimas características de Chrome DevTools, incluyendo el análisis de la pestaña de red, la optimización de la pestaña de rendimiento y los flujos de usuario. Discute la optimización de solicitudes HTTP con prioridad de fetch para mejorar el tiempo de carga. La pestaña de rendimiento proporciona información sobre caídas de fotogramas, tareas largas y la importancia de minimizar el tiempo total de bloqueo. La charla también destaca la optimización del renderizado de páginas e introduce flujos de usuario en Chrome DevTools.

1. Introducción a Chrome DevTools

Short description:

Hola y bienvenidos a mi charla, Aplicaciones Web de Alta Velocidad Más Allá de lo Básico. Cubriré las últimas características de Chrome DevTools, incluyendo el análisis de la pestaña de red, la optimización de la pestaña de rendimiento y los flujos de usuario. Comencemos con la pestaña de red, donde puedes analizar las solicitudes HTTP y usar la prioridad de fetch para optimizar el contenido. En la pestaña de rendimiento, demostraré optimizaciones usando la visibilidad de contenido y la programación. Por último, introduciré los flujos de usuario y presentaré las últimas herramientas para medir el rendimiento en tiempo de ejecución.

Hola y bienvenidos a mi charla, Aplicaciones Web de Alta Velocidad Más Allá de lo Básico, una charla sobre las últimas y mejores características de Chrome DevTools. Permítanme presentarme rápidamente. Mi nombre es Michael, Michael Lutke. Muy difícil de leer, escribir y pronunciar, así que quedémonos con Michael. Lo que hago es consultoría, formación y masterclasses en el campo de las optimizaciones de rendimiento, Angular y programación reactiva. También dirijo una empresa llamada Pushbased. Puedes visitarla, solo haz clic en el enlace en mis diapositivas.

Pero ahora veamos qué hay en la agenda. Primero hablaré sobre la pestaña de red. Te mostraré lo que puedes ver en la pestaña de red y luego intentaré ver algunas de las últimas características. Una de las características geniales que se han lanzado en Chrome es la prioridad de fetch y usaré la prioridad de fetch para optimizar el contenido más grande para pintar con una imagen así como con solicitudes http. Más adelante te mostraré cómo mirar la pestaña de rendimiento. Esto no es realmente fácil porque hay mucha información y espero o digamos que prometo que después de la charla podrás al menos tener un poco más de comprensión sobre lo que verás allí y en qué fijarte. Para demostrar algunas optimizaciones en la pestaña de rendimiento, usaré la visibilidad de contenido, una característica de CSS muy avanzada y también te introduciré a la programación y fragmentación del trabajo en el hilo principal.

Al final de mi charla, algunas cosas realmente, realmente emocionantes de las que quiero hablar son los flujos de usuario. El flujo de usuario es básicamente una nueva herramienta que en este momento solo está disponible en Canary Chrome, y nos permite nuevas formas completamente, de cómo medir el rendimiento en tiempo de ejecución en el navegador. Al final, te presentaré las últimas y más geniales herramientas sobre el flujo de usuario, cómo usarlas y también cómo integrar esas cosas en tu CI. Sin más pausas, me lanzaré directamente al análisis de red y la pestaña de red. Así que lo que ves aquí en esta herramienta es, en primer lugar, seleccioné la pestaña de red y luego tienes mucha información presente. Mucha información sobre todas las solicitudes HTTP que se realizan desde tu aplicación. Y si miras más de cerca la parte derecha de esa diapositiva aquí, verás el diagrama de cascada. En el diagrama de cascada, básicamente ves una especie de gráfico de barras de tiempo que muestra todas nuestras solicitudes HTTP, su inicio, su fin, y de qué tiempo están compuestas. Si pasas el cursor sobre una de esas pestañas, verás el tiempo de solicitud. Y el tiempo de solicitud puede mostrarte alguna información sobre el tiempo de conexión, cuán grande fue la cantidad de datos, y todos los otros tiempos y duraciones que fueron necesarios para completar la recepción de esos datos. En esta diapositiva ves una columna que básicamente nos dice sobre la prioridad de las solicitudes HTTP. Podemos ver que algunas de esas solicitudes HTTP son más importantes, tienen una prioridad más alta que otras, y quiero aprovechar una de las últimas características, la Prioridad de Fetch, para demostrar lo que puedes lograr con la prioridad en tu aplicación. Sin más información sobre la pestaña de red, iré directamente a la práctica y te mostraré cómo podemos cambiar todas las solicitudes que se realizan y cómo podemos mejorarlas. Una de las primeras cosas que quiero mejorar, también visible en la pestaña de red por supuesto, es el tiempo de conexión. En esta diapositiva ves en la parte superior una versión no optimizada de dos solicitudes HTTP a dos dominios diferentes y como puedes ver hay un bloque naranja que conecta y luego un bloque azul que descarga, otro bloque naranja que conecta y otro bloque azul que descarga. Así que si aprovechamos el atributo de pre-conexión en nuestros enlaces, básicamente podemos decirle al navegador, mira a esos dos puntos finales de API a los que enviaremos solicitudes en el futuro, así que ¿por qué no estableces la conexión justo al inicio de la aplicación y luego podemos ahorrar el tiempo de conexión más tarde?

2. Optimizing HTTP Requests with Fetch Priority

Short description:

Esta sección discute la paralelización de los bloqueos de conexión, la prioridad de las solicitudes HTTP y el uso de la prioridad de fetch para optimizar el largest contentful paint de una imagen. El ejemplo demuestra la mejora en el tiempo de carga y la importancia de tener el largest contentful paint al principio. La siguiente optimización implica aprovechar la prioridad de fetch en las solicitudes HTTP.

Esto se demuestra en la parte inferior de la imagen y puedes ver que ambos bloqueos de conexión ahora están paralelizados al principio y todo el gráfico es mucho más corto.

Lo siguiente, y esto es lo nuevo y genial, es la prioridad de esas solicitudes HTTP. Nuevamente, en este gráfico ves una versión no optimizada en la parte superior, alguna ejecución de script, alguna obtención de un recurso A, obtención de un recurso B, y luego renderizando cosas.

Por supuesto, renderizar una imagen es más importante que ejecutar algún script o obtener algunos recursos que se usan más tarde. Entonces, lo primero que hacemos es que deberíamos hacer que todos los bloques de scripting amarillos sean asíncronos y no bloqueantes. Esto se puede lograr con los atributos defer, preload, o prefetch. Diferir scripts simplemente significa mover ese script al final de la cola y continuar con el procesamiento, con el análisis de tu HTML. Y precargar y prefetch significa básicamente que intento obtener datos al principio de, digamos, la parte que no es visible en la página. Así que precargar sería precargar fuentes de recursos que se acceden en un momento posterior en esta misma página. Y prefetch podría significar precargar algunas cosas que se usan después de una navegación.

Con estas tres cosas ya podemos llegar lejos, pero hay otra característica realmente, realmente genial y muy, muy útil: la prioridad de fetch. Así que con la prioridad de fetch básicamente podemos determinar cuáles de mis solicitudes HTTP tienen más prioridad que otras y quiero usarla para actualizar el largest contentful paint de una imagen. Si miramos este fragmento de código aquí, vemos dos enlaces que obtienen algunas imágenes hero y una de esas dos imágenes es más importante que la otra. Así que normalmente solo por el orden del contenido HTML primero obtendríamos la imagen hero 1 y más tarde la imagen hero 2. Pero ahora con la prioridad de fetch puede decirle al navegador que la segunda imagen, incluso si es más tarde en el tiempo, tiene más prioridad que la primera y el navegador cambiaría la ejecución de esas dos solicitudes HTTP y obtendría la segunda antes en el tiempo.

¿Cómo se vería eso en la práctica? Así que, tomé ObservableHQ como un sitio web de prueba y lo que vemos aquí es una imagen de video, o como dije, una pequeña imagen de un video que comenzará a reproducirse más tarde y esto es definitivamente el largest contentful pane, la parte más importante que el usuario debería ver al principio. Al aplicar algunos ajustes al HTML y usar prefetch, terminamos con la siguiente mejora. Así que lo que ves en la parte superior es la primera línea de esta tira de película que nos muestra la página predeterminada y la segunda línea de esta tira de película muestra cuál es el resultado de mi optimización. Hay dos cosas diferentes. En primer lugar, todo el gráfico es mucho más corto ahora. Básicamente pasé de un total de 7 segundos a 4.5 segundos. Pero la parte realmente importante e interesante aquí es que el largest content for paint ahora está presente al principio. Así que pasé de 7 segundos del largest content for paint que puedes ver aquí en la parte superior a 2.5 segundos. Esto también es visible aquí en el diagrama detallado en la parte inferior. Y puedes ver que la imagen es realmente lo primero visible y luego después de eso hay alguna obtención. Pero la imagen siempre es visible y ofrece una experiencia de usuario muy agradable para los usuarios que quieren consumir este video o al menos quieren ver un primer vistazo.

La siguiente optimización que quiero hacer es quiero usar o aprovechar la prioridad de fetch en solicitudes HTTP. Así que cuando usas la API de fetch ahora también puedes darle una importancia a esta solicitud HTTP y esto se hace simplemente aplicando otra configuración como ves aquí. Con esta técnica veamos qué hice en la práctica con ella. Si echamos un vistazo a la página vemos dos contenidos dinámicos diferentes en la página.

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.
Depuración Web Moderna
JSNation 2023JSNation 2023
29 min
Depuración Web Moderna
Top Content
This Talk discusses modern web debugging and the latest updates in Chrome DevTools. It highlights new features that help pinpoint issues quicker, improved file visibility and source mapping, and ignoring and configuring files. The Breakpoints panel in DevTools has been redesigned for easier access and management. The Talk also covers the challenges of debugging with source maps and the efforts to standardize the source map format. Lastly, it provides tips for improving productivity with DevTools and emphasizes the importance of reporting bugs and using source maps for debugging production code.
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.
El Futuro de las Herramientas de Rendimiento
JSNation 2022JSNation 2022
21 min
El Futuro de las Herramientas de Rendimiento
Top Content
Today's Talk discusses the future of performance tooling, focusing on user-centric, actionable, and contextual approaches. The introduction highlights Adi Osmani's expertise in performance tools and his passion for DevTools features. The Talk explores the integration of user flows into DevTools and Lighthouse, enabling performance measurement and optimization. It also showcases the import/export feature for user flows and the collaboration potential with Lighthouse. The Talk further delves into the use of flows with other tools like web page test and Cypress, offering cross-browser testing capabilities. The actionable aspect emphasizes the importance of metrics like Interaction to Next Paint and Total Blocking Time, as well as the improvements in Lighthouse and performance debugging tools. Lastly, the Talk emphasizes the iterative nature of performance improvement and the user-centric, actionable, and contextual future of performance tooling.
How React Compiler Performs on Real Code
React Advanced 2024React Advanced 2024
31 min
How React Compiler Performs on Real Code
Top Content
I'm Nadia, a developer experienced in performance, re-renders, and React. The React team released the React compiler, which eliminates the need for memoization. The compiler optimizes code by automatically memoizing components, props, and hook dependencies. It shows promise in managing changing references and improving performance. Real app testing and synthetic examples have been used to evaluate its effectiveness. The impact on initial load performance is minimal, but further investigation is needed for interactions performance. The React query library simplifies data fetching and caching. The compiler has limitations and may not catch every re-render, especially with external libraries. Enabling the compiler can improve performance but manual memorization is still necessary for optimal results. There are risks of overreliance and messy code, but the compiler can be used file by file or folder by folder with thorough testing. Practice makes incredible cats. Thank you, Nadia!

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 🤐)
React, TypeScript y TDD
React Advanced 2021React Advanced 2021
174 min
React, TypeScript y TDD
Top Content
Featured WorkshopFree
Paul Everitt
Paul Everitt
ReactJS es extremadamente popular y, por lo tanto, ampliamente soportado. TypeScript está ganando popularidad y, por lo tanto, cada vez más soportado.

¿Los dos juntos? No tanto. Dado que ambos cambian rápidamente, es difícil encontrar materiales de aprendizaje precisos.

¿React+TypeScript, con los IDEs de JetBrains? Esa combinación de tres partes es el tema de esta serie. Mostraremos un poco sobre mucho. Es decir, los pasos clave para ser productivo, en el IDE, para proyectos de React utilizando TypeScript. En el camino, mostraremos el desarrollo guiado por pruebas y enfatizaremos consejos y trucos en el IDE.
Dominando conceptos avanzados en TypeScript
React Summit US 2023React Summit US 2023
132 min
Dominando conceptos avanzados en TypeScript
Top Content
Featured WorkshopFree
Jiri Lojda
Jiri Lojda
TypeScript no es solo tipos e interfaces. Únete a esta masterclass para dominar características más avanzadas de TypeScript que harán tu código a prueba de balas. Cubriremos tipos condicionales y notación de inferencia, cadenas de plantillas y cómo mapear sobre tipos de unión y propiedades de objetos/arrays. Cada tema se demostrará en una aplicación de muestra que se escribió con tipos básicos o sin tipos en absoluto y juntos mejoraremos el código para que te familiarices más con cada característica y puedas llevar este nuevo conocimiento directamente a tus proyectos.
Aprenderás:- - ¿Qué son los tipos condicionales y la notación de inferencia?- ¿Qué son las cadenas de plantillas?- Cómo mapear sobre tipos de unión y propiedades de objetos/arrays.
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
De Todo App a B2B SaaS con Next.js y Clerk
React Summit US 2023React Summit US 2023
153 min
De Todo App a B2B SaaS con Next.js y Clerk
Top Content
WorkshopFree
Dev Agrawal
Dev Agrawal
Si eres como yo, probablemente tengas un millón de ideas para proyectos secundarios, algunas de las cuales incluso podrían hacerte ganar dinero como un micro SaaS, o podrían resultar ser la próxima startup de mil millones de dólares. Pero, ¿cómo sabes cuáles? ¿Cómo pasas de una idea a un producto funcional que puede ser puesto en manos de clientes que pagan sin renunciar a tu trabajo e invirtiendo todo tu tiempo y dinero en ello? ¿Cómo pueden competir tus proyectos secundarios en solitario con las aplicaciones construidas por enormes equipos y grandes empresas?
Construir productos SaaS ricos viene con desafíos técnicos como infraestructura, escalabilidad, disponibilidad, seguridad y subsistemas complicados como autenticación y pagos. Por eso, a menudo son los gigantes tecnológicos ya establecidos quienes pueden construir y operar productos de este tipo de manera razonable. Sin embargo, una nueva generación de devtools está permitiendo a los desarrolladores construir fácilmente soluciones completas que aprovechan la mejor infraestructura en la nube disponible, y ofrecen una experiencia que te permite iterar rápidamente en tus ideas por un bajo costo de $0. Se llevan todos los desafíos técnicos de construir y operar productos de software para que solo tengas que pasar tu tiempo construyendo las características que tus usuarios quieren, dándote una oportunidad razonable de competir contra el mercado al mantenerte increíblemente ágil y receptivo a las necesidades de los usuarios.
En esta masterclass de 3 horas comenzarás con una simple aplicación de gestión de tareas construida con React y Next.js y la convertirás en un producto SaaS completamente funcional y escalable integrando una base de datos escalable (PlanetScale), autenticación multi-tenant (Clerk), y pagos basados en suscripción (Stripe). También aprenderás cómo los principios del desarrollo de software ágil y el diseño impulsado por el dominio pueden ayudarte a construir productos rápidamente y de manera rentable, y competir con las soluciones existentes.
Depuración del Rendimiento de React
React Advanced 2023React Advanced 2023
148 min
Depuración del Rendimiento de React
Workshop
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Veía una interacción lenta, probaba una optimización aleatoria, veía que no ayudaba, y seguía probando 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. Hacía una grabación en Chrome DevTools o React Profiler, la examinaba, intentaba hacer clic en cosas al azar, y luego la cerraba 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 cómo 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, cubriremos el rendimiento de interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)