Recursos estáticos
Next.js puede servir recursos estáticos, como imágenes, desde el directorio public
de primer nivel. Los archivos dentro de public
pueden ser referenciados desde la raíz de la aplicación de manera similar a pages
.
El directorio public
también es útil para robots.txt
, la verificación de Google Site Verification y cualquier otro recurso estático. Consulta la documentación sobre Servicio de archivos estáticos para aprender más.
Descargar tu foto de perfil
Primero, obtengamos tu foto de perfil.
- Descarga tu foto de perfil en formato
.jpg
(o usa este archivo). - Crea un directorio
images
dentro del directoriopublic
. - Guarda la imagen como
profile.jpg
en el directoriopublic/images
. - El tamaño de la imagen puede ser aproximadamente de 400px por 400px.
- Puedes eliminar el archivo SVG de logo no utilizado directamente bajo el directorio
public
.
Imagen no optimizada
Con HTML normal, agregarías tu foto de perfil de la siguiente manera:
<img src="/images/profile.jpg" alt="Your Name" />
Sin embargo, esto significa que debes manejar manualmente:
- Asegurar que tu imagen sea responsiva en diferentes tamaños de pantalla
- Optimizar tus imágenes con herramientas o bibliotecas de terceros
- Cargar imágenes solo cuando entren en el viewport
Y más. En cambio, Next.js proporciona un componente Image
listo para usar que maneja esto por ti.
Componente Image y optimización de imágenes
next/image
es una extensión del elemento HTML <img>
, evolucionado para la web moderna.
Next.js también tiene soporte para Optimización de Imágenes por defecto. Esto permite redimensionar, optimizar y servir imágenes en formatos modernos como WebP cuando el navegador lo soporta. Esto evita enviar imágenes grandes a dispositivos con viewports más pequeños. También permite que Next.js adopte automáticamente formatos de imagen futuros y los sirva a navegadores que los soporten.
La Optimización Automática de Imágenes funciona con cualquier fuente de imagen. Incluso si la imagen está alojada en una fuente de datos externa, como un CMS, aún puede ser optimizada.
Usando el componente Image
En lugar de optimizar imágenes en tiempo de compilación, Next.js optimiza imágenes bajo demanda, según las solicitudes de los usuarios. A diferencia de los generadores de sitios estáticos y soluciones estáticas, los tiempos de compilación no aumentan, ya sea que envíes 10 imágenes o 10 millones de imágenes.
Las imágenes se cargan de forma diferida (lazy loaded) por defecto. Esto significa que la velocidad de tu página no se ve penalizada por imágenes fuera del viewport. Las imágenes se cargan cuando aparecen en el viewport.
Las imágenes siempre se renderizan de manera que evitan el Cambio Acumulativo de Diseño (Cumulative Layout Shift), un Core Web Vital que Google va a usar en el ranking de búsqueda.
Aquí tienes un ejemplo usando next/image
para mostrar nuestra foto de perfil. Las props height
y width
deben ser el tamaño de renderizado deseado, con una relación de aspecto idéntica a la imagen fuente.
Nota: Usaremos este componente más adelante en "Pulir el diseño", no es necesario copiarlo todavía.
import Image from 'next/image';
const YourComponent = () => (
<Image
src="/images/profile.jpg" // Ruta del archivo de imagen
height={144} // Tamaño deseado con relación de aspecto correcta
width={144} // Tamaño deseado con relación de aspecto correcta
alt="Your Name"
/>
);
Para aprender más sobre la Optimización Automática de Imágenes, consulta la documentación.
Para aprender más sobre el componente
Image
, consulta la referencia API denext/image
.