Contenido del curso
Antes de optimizar...
Crítical Rendering Path
- 7

Entendiendo el Critical Rendering Path en Navegadores Web
11:11 min - 8

Optimización de JavaScript para mejorar rendimiento web
10:53 min - 9

Priorización de recursos CSS para mejorar rendimiento web
11:50 min - 10

Optimización de Carga de Recursos con Preload, Prefetch y Preconnect
10:36 min - 11

Optimización de Animaciones CSS para Mejorar el Renderizado
02:35 min
CSS
WebFonts
Imágenes, Iconos y SVG
- 15

Optimización de Imágenes para Web: Formatos y Herramientas Efectivas
15:32 min - 16

Optimización de Imágenes para Web: Uso de Tamaños y Formatos Adecuados
05:20 min - 17

Comparación entre WebFonts y SVG: Ventajas y Desventajas
08:58 min - 18

Lazy Loading de Imágenes: Técnicas y Estrategias Efectivas
10:14 min - 19

Carga Adaptativa de Imágenes con Gatsby y Web API
04:12 min
Aplicaciones JavaScript
- 20

Optimización de JavaScript para Producción Web
11:20 min - 21

Análisis y Optimización de Bundles con Webpack
11:25 min - 22

Optimización de Bundles en Proyectos Web con Webpack
17:14 min - 23

Code Splitting con Webpack: Optimización de Bundles en Proyectos Web
06:31 min - 24

Lazy Loading de Videos con JavaScript y Modales
21:44 min - 25

Event Propagation y Filtrado de Eventos en JavaScript
17:24 min - 26

Integración de Librerías en Proyectos JavaScript
Viendo ahora - 27

Optimización de Carga de Modales con Lazy Loading en Webpack
13:24 min - 28

Renderizado en Cliente vs. Servidor: Diferencias y Funciones
08:44 min - 29

Implementación de Server Side Rendering en NodeJS
19:41 min - 30

Optimización de Sitios con Static Site Generation
15:51 min
Caché
- 31

Funcionamiento de Caché y Redes de Distribución de Contenido (CDN)
05:50 min - 32

Configuración y despliegue de sitios web con Netlify y Github Actions
09:03 min - 33

Automatización de despliegues con Github Actions y Cron en Netlify
09:25 min - 34

Implementación de Caché con Service Workers en JavaScript
14:04 min
Performance Budget
Conclusiones
Integración de Librerías en Proyectos JavaScript
Resumen
Integrar librerías de terceros en un proyecto con webpack no siempre es sencillo, especialmente cuando la librería elegida no fue diseñada para el flujo que necesitamos. Aquí se muestra paso a paso cómo instalar Modal Video desde NPM, conectarla con listeners ya existentes y resolver los problemas de CSS que aparecen al importar estilos de un paquete externo.
¿Cómo conectar los listeners con la librería Modal Video?
El punto de partida es un proyecto que ya captura el video ID de YouTube mediante listeners optimizados [01:00]. El siguiente paso es crear una función que reciba ese identificador y abra el modal correspondiente.
- Se crea un archivo separado llamado
openModal.jspara mantener el código organizado. - La función se exporta como un named export, lo que obliga a importarla con la misma sintaxis:
import { openModal } from './openModal'[03:18]. - Dentro de
openModal, se recibe elvideoIdcomo parámetro y, por ahora, se imprime en consola para verificar que la conexión funciona.
Un detalle importante es el uso de template literals (comillas invertidas) para interpolar variables dentro de cadenas de texto [04:05]. Si se olvidan, la interpolación con ${} no funciona.
¿Por qué esta librería requiere un hack para funcionar con lazy loading?
La librería Modal Video se instala con npm install modal-video [01:42]. Sin embargo, su API no expone un método directo como .open(videoId). En cambio, funciona mediante una función constructora que necesita recibir una clase CSS o un elemento del DOM al que se le asigna un listener automático [05:08].
Esto genera un problema: no es compatible directamente con el patrón de lazy loading que se busca implementar. La solución es un hack que crea un botón fantasma en memoria [06:02]:
javascript const button = document.createElement('button'); button.dataset.videoId = videoId; new ModalVideo([button]); button.click();
- Se crea un elemento
<button>condocument.createElement. - Se le asigna el
videoIdusando la propiedad dataset, que en JavaScript se accede comobutton.dataset.videoIden lugar dedata-video-iddel HTML [06:30]. - Se instancia
ModalVideopasándole un array con el botón como elemento a escuchar. - Finalmente se ejecuta
button.click()para forzar la apertura del modal de forma programática [07:05].
Este patrón de crear elementos en memoria y simular interacciones es útil cuando una librería no ofrece una API flexible.
¿Cómo resolver el problema de CSS con webpack loaders?
Al ejecutar el código, el modal aparece pero sin estilos [08:02]. La librería incluye su propio archivo CSS dentro de node_modules/modal-video/css/modal-video.min.css. Para importarlo basta con:
javascript import 'modal-video/css/modal-video.min.css';
Pero webpack no entiende CSS por defecto y lanza un error [08:45]. Se necesitan dos loaders:
- css-loader: permite a webpack interpretar archivos
.css. - style-loader: inyecta el CSS procesado dentro del bundle final.
Se instalan como dependencias de desarrollo:
bash npm install --save-dev style-loader css-loader
Y se configura una nueva regla en webpack.config.js [09:25]:
javascript module: { rules: [ { test: /.css$/i, use: ['style-loader', 'css-loader'] } ] }
La expresión regular /\.css$/i indica que la regla aplica a cualquier archivo que termine en .css, sin importar mayúsculas o minúsculas. El flag i se encarga de esa insensibilidad [09:50].
Tras reinstalar y ejecutar npm run dev, el modal se muestra correctamente con estilos aplicados [10:22]. Al hacer clic en cualquier elemento, se abre un modal funcional con el video de YouTube correspondiente.
El resultado es una integración que funciona al 90 %. Queda pendiente revisar por qué algunos videos muestran un error de reproducción dentro del modal, un reto ideal para practicar la depuración. ¿Te animás a investigar qué ajuste falta para que todos los videos carguen correctamente?