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.
Comments