18 de Octubre
PLAZAS LIMITADAS

Optimización de imágenes en Gatsby

La etiqueta picture cuando se trabaja con gatsby

Optimización de imágenes en Gatsby
Autor:
Carlos Sánchez
Temática:
Multimedia
,
Tecnologías
,
WPO
Fecha de publicación:
2023-03-27

Última revisión:
2023-04-19

Si ya sabes la importancia que tiene la etiqueta picture para poder insertar imágenes en formatos de nueva generación como AVIF o WEBP, mejorando el rendimiento pero sin afectar a la compatibilidad con los navegadores.

En los Frameworks de Javascript suele haber una gran performance de velocidad, pero nuestro principal problema suele ser la renderización. No obstante, muchos de estos frameworks tienen algún que otro vicio por defecto.

Es posible que te interese que Gatsby, al igual que Next, no hacen un buen trabajo con las imágenes de forma nativa.

Así que modificamos de esta forma el componente CustomImg para utilizar GatsbyImage:

import React from 'react';
import { GatsbyImage } from 'gatsby-plugin-image';
const CustomImg = ({ image, alt, className }) => {
return (
<GatsbyImage className={className} image={image} alt={alt} />
);
};
export default CustomImg;

Y en el archivo en el que uses este componente CustomImg, necesitarás importar getImage y pasar la imagen como una prop:


import React from 'react';
import { graphql } from 'gatsby';
import { getImage } from 'gatsby-plugin-image';
import CustomImg from '../components/CustomImg';
const MyPage = ({ data }) => {
const image = getImage(data.myImage);
return (
<div>
<CustomImg image={image} alt="Descripción de la imagen" className="my-image-class" />
</div>
);
};
export const query = graphql`
query {
myImage: file(relativePath: { eq: "carpeta/imagen.jpg" }) {
childImageSharp {
gatsbyImageData(layout: CONSTRAINED, placeholder: BLURRED, formats: [AUTO, WEBP, AVIF])
}
}
}
`;
export default MyPage;

Este código importa el componente GatsbyImage y getImage de gatsby-plugin-image. Luego, en el componente CustomImg, pasamos la imagen como una prop en lugar de utilizar data. El componente GatsbyImage manejará automáticamente la optimización de imágenes y la generación de URLs amigables.

Asegúrate de tener instalado y configurado el plugin gatsby-plugin-image y gatsby-transformer-sharp en tu archivo gatsby-config.js.

Por defecto, el componente GatsbyImage genera automáticamente imágenes en formato WebP y las incluye en la etiqueta picture. Sin embargo, no se muestra explícitamente en el código del componente.

Cuando se utiliza gatsbyImageData en tu consulta GraphQL y se especifican los formatos que se desean incluir, en el código de arriba: (formats: [AUTO, WEBP, AVIF]), el plugin gatsby-plugin-image se encarga de generar las imágenes en diferentes formatos, incluyendo WebP.

Cuando se utiliza el componente GatsbyImage, el HTML generado contendrá las etiquetas <source> con los diferentes formatos de imagen, incluyendo WebP, dentro de la etiqueta <picture> de forma automática con Gatsby.

En este codesanbox, aunque no tienen la implementación que he expuesto, vemos como si se aplica la etiqueta picture de una forma correcta.

No obstante, en el caso de dar error, yo antes, en otras versiones, lo aplicaba de una forma más manual:

import React from 'react';
import { graphql } from 'gatsby';
import { getImage } from 'gatsby-plugin-image'
const CustomImg = ({ data, alt, className }) => {
const image = getImage(data);
const sources = [
{
type: 'image/webp',
srcSet: image.images.sources[0].srcSetWebp,
sizes: image.images.sources[0].sizes,
},
{
type: 'image/jpeg',
srcSet: image.images.sources[0].srcSet,
sizes: image.images.sources[0].sizes,
},
];
return (
<picture className={className}>
{sources.map((source, index) => (
<source key={index} type={source.type} srcSet={source.srcSet} sizes={source.sizes} />
))}
<img src={image.images.fallback.src} alt={alt} />
</picture>
);
};
export default CustomImg;

Bibliografía

Si te gusta este artículo, me ayudarías un montón compartiendo mi contenido:
No se te da mal el SEO Técnico

Te falta mi máster. Accede a una formación avanzada que te permitirá aplicar e implementar SEO en cualquier tipo de WEB

¡Accede al Máster de SEO Técnico!
Tal vez te interesen otros artículos:
Artículos de SEO

Si te ha gustado esta publicación, siempre me lo puedes agradecer dándome like en esta publicación de LinkedIn sobre este mismo artículo.

Usamos cookies para asegurar que te damos la mejor experiencia en nuestra web. Aquí tienes nuestra política de privacidad.