Imaginemos por un momento esta situación. Después de un mucho trabajo de optimización lograste un sitio con un score 100/100 en PageSpeed Insights (o cerca). Entonces tenés la idea de darle un toque de movimiento con videos. Y no hay nada más fácil y rápido que el código de inserción de YouTube™. ¿Qué puede malir sal?.
Si, en grande y negrita. El código de inserción de videos de YouTube es una carreta. Decile adiós al puntaje de 100 en las pruebas de velocidad. En promedio se descargan unos 600KB en JavaScript entre Youtube y Google Ads, bloqueando el renderizado de la página por cada iframe inertado. Locura total.
Con datos móviles y una conexión regular, son 5 segundos de sobrecarga por video. Casi que despedimos a nuestros visitantes antes de entrar. Pero Fear not my friends, encontramos una solución.
Desarrollamos un módulo open source en JavaScript que te va a permitir agregar todos los videos que quieras sin sufrir el impacto de performance: lazy-load-embed
. Sus caracteristicas:
<a>
apuntando al video. Si el usuario no tiene JavaScript puede dirigirse al video y verlo ahí.Navigator.connection
.Si usas rollup o webpack
$ npm install --save lazy-youtube-embed
Y después
import lazyYoutubeEmbed from 'lazy-youtube-embed'
Si no, directamente en el código HTML via CDN
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/logico/lazy-youtube-embed/dist/lazy-youtube-embed.css" />
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/lazy-youtube-embed@1.0.0/dist/lazy-youtube-embed.js" defer></script>
Simplemente con ponerle la clase "lazy-youtube-embed"
, en el src
la URL de YouTube (el de compartir) y ya estaría. Del resto se encarga lazy-youtube-embed
.
<a src="https://youtu.be/djV11Xbc914" class="lazy-youtube-embed">a-ha - Take On Me (Video Oficial)</a>
a-ha - Take On Me (Video Oficial)
80's & 90's UK Soundsystem with Ash
Summer Paradise
Funk'n Japanese
Dicen que las comparaciones son odiosas, pero en este caso, necesarias. Buscamos las implementaciones más populares y las probamos en igualdad de condiciones.
lazy-youtube-embed
salió primera siendo un ~15% más rápida y pesando sólo 2.7KB.
Lazy YouTube Embed
.Lite YouTube Embed
repo.srcdoc
css-tricks.<amp-youtube>
amp-youtube.<iframe>
original de YouTube.Si no querés perder puntos en Google al insertar videos en tu sitio, usá lazy-youtube-embed
. El repositorio del proyecto se encuentra en GitHub. Ideas y mejoras son bienvenidas.
Aviso: Ningún punto de PageSpeed ha sido lastimado durante la redacción de este post.