Share
Embed
INP - Qué es y cómo optimizarlo
Slides de mi presentación en el Barcelona Web Performance meetup el 28 de marzo de 2023.
Estela Franco
March 28, 2023
Transcript
48 slides
-
guaca Estela Franco Web Performance Specialist at Schneider Electric @guaca
estelafranco.com webperfimpacters.com @guaca #BCNWebPerf mujeresenseo.es -
CORE WEB VITALS No aplica a desktop Junio 2021 Mobile
Febrero 2022 Desktop @guaca #BCNWebPerf -
“ user-centric user experience, Each of the Core Web Vitals
represents a distinct facet of the user experience, is measurable in the field, and reflects the real-world experience of a critical user-centric outcome. @guaca #BCNWebPerf -
Carga: LCP El tiempo para renderizar la imagen o bloque
de texto más grande visible dentro del viewport. ▹ <img> ▹ <image> dentro de un <svg> ▹ Atributo “poster” de un tag <video> ▹ Una imagen de background que se carga con url() ▹ Elementos a nivel de bloque que contienen nodos de texto @guaca #BCNWebPerf -
Carga: LCP El tiempo para renderizar la imagen o bloque
de texto más grande visible dentro del viewport. @guaca #BCNWebPerf -
Estabilidad Visual: CLS Mide la ráfaga más grande de puntuaciones
de cambio de diseño para cada cambio de diseño inesperado que se produce durante toda la vida útil de una página. @guaca #BCNWebPerf fracción de impacto * fracción de distancia -
Estabilidad Visual: CLS Mide la ráfaga más grande de puntuaciones
de cambio de diseño para cada cambio de diseño inesperado que se produce durante toda la vida útil de una página. @guaca #BCNWebPerf -
Estabilidad Visual: CLS Mide la ráfaga más grande de puntuaciones
de cambio de diseño para cada cambio de diseño inesperado que se produce durante toda la vida útil de una página. @guaca #BCNWebPerf -
Interactividad: FID comenzar a procesar esa interacción El FID mide
la interacción de acciones discretas: ▹ Clic ▹ Tap ▹ Presionar una tecla Es una métrica que no podemos medir en datos de laboratorio. Mide el tiempo desde que un usuario interactúa por primera vez con una página hasta que el navegador puede comenzar a procesar esa interacción. @guaca #BCNWebPerf -
Interactividad: FID @guaca #BCNWebPerf Mide el tiempo desde que un
usuario interactúa por primera vez con una página hasta que el navegador puede comenzar a procesar esa interacción. -
Solamente mide la primera interacción. Esto excluye el 90% del
tiempo que pasamos en una página. Limitaciones del FID Solamente mide la demora hasta que puede comenzar a procesar la interacción. @guaca #BCNWebPerf -
Interaction to Next Paint ▹ Evalúa la capacidad de respuesta
a las interacciones que un usuario hace con una página. ▹ Objetivo: garantizar que el tiempo desde que se inicia una interacción hasta que se pinta el siguiente frame sea lo más corto posible. ▹ Reporta un valor por debajo del cual ocurrieron todas o casi todas las interacciones. @guaca #BCNWebPerf -
▹ Solo la primera interacción. ▹ No es perceptible para
el usuario. ▹ Reporta cuándo el hilo principal puede empezar a procesar la interacción. ▹ Todas las interacciones durante toda la vida útil de la página. ▹ Es perceptible para el usuario. ▹ Reporta el valor de la interacción más larga*. INP vs FID * Percentil 100 si hay < 50 interacciones, percentil 98 o 99 si hay > 50 interacciones @guaca #BCNWebPerf -
¿Cómo medir el INP? ▹ Como el FID, es una
métrica de campo - no está disponible en herramientas de synthetic monitoring. ▹ CrUX registra datos del INP desde febrero de 2022. ▹ PageSpeed Insights muestra datos de INP. ▹ No está disponible en Search Console. ▹ Empieza a estar disponible en algunas herramientas RUM. @guaca #BCNWebPerf -
¿Cómo medir el INP? ▸ Opciones de instalación ▪ npm
install web-vitals ▪ Como <script> desde un CDN ▸ Enviar los datos a: ▪ Google Analytics (UA/GA4) ▪ Google Tag Manager bit.ly/webvitals-js bit.ly/webvitals-report @guaca #BCNWebPerf ▹ Librería web-vitals.js -
¿Cómo optimizar el INP? Investigación Averiguar qué está causando malos
resultados de INP, identificando cuáles son las interacciones más lentas con datos de campo. ▹ web-vitals.js 👍 @guaca #BCNWebPerf -
¿Cómo optimizar el INP? Reproducir interacción Una vez identificadas las
interacciones críticas, podemos reproducirlas en el laboratorio ▹ Chrome Performance profiler 👍 @guaca #BCNWebPerf -
¿Cómo optimizar el INP? Reproducir interacción Una vez identificadas las
interacciones críticas, podemos reproducirlas en el laboratorio ▹ Chrome Performance profiler 👍 ▹ Lighthouse en modo Timespan 👍 @guaca #BCNWebPerf -
¿Cómo optimizar el INP? Reproducir interacción Una vez identificadas las
interacciones críticas, podemos reproducirlas en el laboratorio ▹ Chrome Performance profiler 👍 ▹ Lighthouse en modo Timespan 👍 @guaca #BCNWebPerf -
¿Cómo optimizar el INP? Reducir Input Delay @guaca #BCNWebPerf ▹
Dividir una long task en varias tasks. ▹ Usar Scheduler API para priorizar tareas críticas y diferir las no críticas. ▹ Valorar el usar isInputPending para comprobar si hay algún input del usuario pendiente de atender. Identificar posibles tasks que estén provocando un elevado input delay puede ayudarnos a reducir el INP. -
Asegurarnos de que los callbacks que se ejecutan como respuesta
a una interacción se completan lo más rápido posible. ¿Cómo optimizar el INP? Minimizar el Processing time @guaca #BCNWebPerf ▹ Limitar el código que se ejecuta a la lógica necesaria para actualizar el siguiente frame. ▹ Diferir todo lo demás a una tarea posterior. -
Es la parte del proceso donde seguramente menos control vayamos
a tener. ¿Cómo optimizar el INP? Minimizar el Presentation delay @guaca #BCNWebPerf ▹ Evitar el uso de requestAnimationFrame() para tareas que no están relacionadas con el renderizado. ▹ Cuidado con el uso de async/await. ▹ Cuidado con el uso de ResizeObserver. -
KEY TAKEAWAYS ▹ INP es una métrica de capacidad de
respuesta. ▹ Mide el tiempo por debajo del cual han sucedido (casi) todas las interacciones. ▹ Está previsto que pueda sustituir al FID como CWV. ▹ Mide y optimiza desde ya. @guaca #BCNWebPerf -
Enlaces de interés ▹ Optimize long tasks: https://web.dev/optimize-long-tasks/ ▹ Event
Timing API: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEventTiming ▹ Prioritized Task Scheduling API: https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API ▹ isInputPending: https://developer.chrome.com/articles/isinputpending/ ▹ requestAnimationFrame: https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame @guaca #BCNWebPerf