Optimización de Imágenes en Angular con NG Optimizate Image
Clase 8 de 36 • Curso de Angular Avanzado
Contenido del curso
- 7

Buenas prácticas con variables locales en Angular
09:14 - 8

Optimización de Imágenes en Angular con NG Optimizate Image
17:08 - 9

Optimización de Rutas Amigables para SEO en Angular
11:27 - 10

"Reactividad en Angular: Migración a Input Signals"
20:42 - 11

Migración de Inputs a Signals en Angular: Mejora de Rendimiento y Flujo
12:24 - 12

Migración de Outputs en Angular: De Decoradores a Funciones
07:35 - 13

Primitivas reactivas de Angular: Uso de Linked Signal y Computed
12:56 - 14

Sincronización de Componentes en Angular con Model y Signals
12:03 - 15

Interoperabilidad de RXJS y Signals en Angular
11:18 - 16

Conversión de Observables a Signals en Angular con toSignal
08:07 - 17

Interoperabilidad de RXDS y Signals en Angular: Uso de RX Resourcers
11:10 - 18

Manejo de Parámetros Reactivos con RX Resource en Angular
09:18 - 19

Manejo de Promesas y Fetch en Angular sin RXJS
07:59 - 20

Reactividad en Angular: Uso de Signals para Consultas DOM
09:00 - 21

Configuración de Prettier para HTML en Angular
05:28 quiz de Nuevas Funcionalidades en Angular
- 22

Server Side Rendering en Angular: Builders y Migración
10:17 - 23

Server Side Rendering con Angular: Mejora Rendimiento y SEO
13:26 - 24

Manejo de APIs del Navegador con Angular: Uso de AfterNextRender
09:43 - 25

Geolocalización y APIs: Creando un Mapa de Tiendas Cercanas
15:39 - 26

Habilitar Pre-rendering en Angular para Generación de Sitios Estáticos
11:26 - 27

Despliegue de Aplicaciones Node.js con App Fiber Hosting
18:12 quiz de Server-Side Rendering (SSR) y Navegación
- 28

Generación de Meta Tags Dinámicos con Angular y Open Graph
15:11 - 29

Creación de MetaTags Dinámicos en Angular
12:51 - 30

Proceso de Hydration y Event Replay en Angular
05:54 - 31

Implementación de Productos Relacionados en Angular eCommerce
09:26 - 32

Carga diferida de componentes en Angular para mejorar rendimiento
10:10 - 33

Optimización de Incremental Hydration en Angular
06:14 - 34

Configuración de Server Routing en Angular
10:43 - 35

Aplicaciones Sin Zone.js: Migración a Signals en Angular
13:02 - 36

Despliegue y Reactividad Avanzada en Angular
00:53
La optimización de imágenes es un aspecto fundamental para mejorar el rendimiento de nuestras aplicaciones web en Angular. Con la introducción de la directiva NgOptimizedImage, podemos lograr una carga más eficiente y una mejor estabilidad visual, factores clave para ofrecer una experiencia de usuario superior. Esta herramienta nos permite implementar técnicas avanzadas de optimización sin necesidad de configuraciones complejas, mejorando significativamente los indicadores de rendimiento web.
¿Qué son los Web Vitals y por qué son importantes?
Los Web Vitals son métricas esenciales que Google utiliza para evaluar la experiencia de usuario en sitios web. Estas métricas se centran en tres aspectos fundamentales:
- Loading (Carga): Mide qué tan rápido carga nuestra página.
- INM (Interactividad): Evalúa qué tan rápido el usuario puede interactuar con los elementos.
- CLS (Cumulative Layout Shift): Mide la estabilidad visual durante la carga.
La directiva NgOptimizedImage nos ayuda principalmente a mejorar dos de estos aspectos: el loading y el CLS. La estabilidad visual es particularmente importante porque evita situaciones frustrantes para los usuarios, como cuando intentan hacer clic en un botón y este se desplaza debido a que otros elementos están cargándose, provocando que hagan clic en algo no deseado.
¿Cómo funciona NgOptimizedImage?
NgOptimizedImage es una directiva de Angular que optimiza automáticamente la carga de imágenes. Para implementarla, necesitamos:
- Importar la directiva desde '@angular/common'
- Aplicarla a nuestras etiquetas de imagen
- Configurar correctamente sus atributos
import { NgOptimizedImage } from '@angular/common';
// En los imports del componente
imports: [NgOptimizedImage]
¿Cómo implementar NgOptimizedImage en nuestros componentes?
La implementación básica consiste en reemplazar el atributo src tradicional por ngSrc. Sin embargo, para que funcione correctamente, debemos considerar algunas restricciones y configuraciones adicionales.
Configuración con dimensiones fijas
Para elementos con dimensiones conocidas, como imágenes de galería o thumbnails, podemos especificar el ancho y alto directamente:
<img ngSrc="ruta-de-la-imagen.jpg" width="80" height="80" alt="Descripción">
Esta configuración es ideal para componentes como carruseles o galerías donde conocemos las dimensiones exactas. Al especificar el ancho y alto, Angular reserva ese espacio antes de que la imagen cargue, evitando cambios en el layout durante la carga.
Configuración con dimensiones responsivas
Para imágenes que necesitan adaptarse a diferentes tamaños de pantalla, la configuración es diferente. Necesitamos:
- Usar el atributo
fill="true" - Envolver la imagen en un contenedor con
position: relative - Definir dimensiones para el contenedor
<div class="relative h-96">
<img ngSrc="ruta-de-la-imagen.jpg" fill="true" alt="Descripción">
</div>
Con esta configuración, la imagen se adaptará al tamaño del contenedor padre, manteniendo su relación de aspecto y sin distorsionarse. El contenedor debe tener una altura definida, ya que el ancho generalmente se adapta automáticamente en diseños responsivos.
¿Cómo mejorar aún más el rendimiento con lazy loading?
Una vez implementada la directiva NgOptimizedImage, podemos optimizar aún más el rendimiento utilizando lazy loading. Esta técnica carga las imágenes solo cuando están a punto de entrar en el viewport del usuario, reduciendo significativamente las solicitudes iniciales.
Para implementar lazy loading, simplemente agregamos el atributo loading="lazy":
<img ngSrc="ruta-de-la-imagen.jpg" width="80" height="80" loading="lazy" alt="Descripción">
El lazy loading funciona perfectamente con NgOptimizedImage, creando una estrategia de carga inteligente que:
- Reduce el número de solicitudes HTTP iniciales
- Carga las imágenes justo antes de que el usuario las necesite (aproximadamente cuando están a 10px de entrar en el viewport)
- Mejora el tiempo de carga inicial de la página
Esta técnica es especialmente útil en páginas con muchas imágenes, como catálogos de productos o galerías, donde cargar todas las imágenes de una vez sería ineficiente.
Beneficios observables
Al implementar estas optimizaciones, podemos observar en las herramientas de desarrollo (pestaña Network) cómo las imágenes se cargan progresivamente a medida que hacemos scroll, en lugar de cargarse todas al inicio. Esto resulta en:
- Menor tiempo de carga inicial
- Mejor rendimiento general
- Menor consumo de datos para el usuario
- Mejor experiencia de usuario con estabilidad visual
La optimización de imágenes con NgOptimizedImage es una técnica poderosa que mejora significativamente el rendimiento de nuestras aplicaciones Angular. Implementando correctamente esta directiva junto con lazy loading, podemos ofrecer una experiencia de usuario más fluida y eficiente. ¿Has implementado estas técnicas en tus proyectos? Comparte tu experiencia en los comentarios.