Principais dicas sobre desempenho na Web

Use srcset para escolher automaticamente o tamanho certo da imagem.

De acordo com o HTTP Archive, um uma página da Web para dispositivos móveis típica pesa mais de 2,6 MB, e mais de dois terços desse peso são imagens. Essa é uma ótima oportunidade de otimização.

Média de bytes da página para dispositivos móveis por tipo de conteúdo

Resumo

  • Não salve imagens maiores que o tamanho de exibição.
  • Salve vários tamanhos para cada imagem e use a função srcset para permitir que o navegador escolha o menor. O valor w informa ao navegador a largura de cada versão:
<img src="small.jpg"
     srcset="small.jpg 500w,
             medium.jpg 1000w,
             large.jpg 1500w"
     alt="…">

Salvar imagens com o tamanho certo

É possível deixar seu site mais rápido e reduzir o consumo de dados usando imagens com que correspondem ao tamanho de exibição. Em outras palavras, dê às imagens largura e altura ao salvá-los.

Dê uma olhada nas imagens abaixo.

Eles parecem quase idênticos, mas o tamanho do arquivo de um é mais de 10 vezes maior que o outro.

Gatinho e Lias: dois gatinhos malhados com dez semanas de idade.
Largura salva de 1.000 px, tamanho do arquivo de 184 KB
Gatinho e Lias: dois gatinhos malhados com dez semanas de idade.
Largura salva de 300 px, tamanho do arquivo de 16 KB

A primeira imagem é muito maior em tamanho de arquivo porque é salva com as dimensões muito maior do que o tamanho da exibição. Ambas as imagens são exibidas com um largura de 300 pixels, por isso faz sentido usar uma imagem salva no mesmo tamanho.

Para larguras fixas, use imagens salvas com as mesmas dimensões tamanho de exibição.

E se o tamanho da exibição variar?

Em um mundo com vários dispositivos, as imagens nem sempre são exibidas em um único tamanho fixo.

Elementos de imagem podem ter uma largura percentual ou fazer parte de layouts responsivos em que os tamanhos de exibição da imagem mudam para se ajustar ao tamanho da tela.

E os dispositivos com muitos pixels, como as telas Retina?

Ajudar o navegador a escolher o tamanho certo da imagem

Não seria ótimo disponibilizar cada imagem em tamanhos diferentes, deixar o navegador escolher o melhor tamanho para o dispositivo e de exibição? Infelizmente, há um catch-22 quando se trata de descobrir qual é a melhor imagem. O navegador deve usar o menor tamanho possível imagem, mas não poderá saber a largura de uma imagem sem fazer download dela para verificar.

É aí que a propriedade srcset vai ser útil. Você salva imagens em tamanhos diferentes informar ao navegador a largura de cada versão:

<img src="small.jpg"
     srcset="small.jpg 500w, medium.jpg 1000w, large.jpg 1500w"
     alt="…">

Os valores w mostram a largura de cada imagem em pixels. Por exemplo: small.jpg 500w informa ao navegador que small.jpg é 500. pixels de largura. Isso permite que o navegador escolha a menor imagem possível, dependendo do tipo de tela e do tamanho da janela de visualização, sem ter que fazer o download de imagens para verificar o tamanho delas.

Veja o srcset em ação na imagem abaixo. Se estiver em um laptop ou computador, altere o tamanho da janela do navegador e reabra esta página. Em seguida, use o painel "Rede" das ferramentas do navegador para verificar qual imagem foi usada. É necessário fazer isso em uma janela anônima ou particular. Caso contrário, o arquivo da imagem original será armazenado em cache.

Lias e Little Gatinho: dois filhotes de gatinho malhados cinza e com dez semanas

Como posso criar vários tamanhos de imagem?

Será necessário disponibilizar vários tamanhos para cada imagem que quiser usar. com srcset.

Para imagens únicas, como imagens principais, você pode salvar manualmente tamanhos diferentes. Se você tem muitas imagens, como fotos de produtos, precisará automatizar. Para isso, há duas abordagens.

Incorporar o processamento de imagens no processo de build

Como parte do processo de build, é possível adicionar etapas para criar diferentes tamanhos mais recentes das imagens. Consulte "Usar o Imagemin para compactar imagens". para saber mais.

Usar um serviço de imagem

A criação e a entrega de imagens podem ser automatizadas usando um serviço comercial como Cloudinary ou um equivalente de código aberto, como Thumbor, instalado e executado por você.

Você faz upload das imagens de alta resolução e do serviço de imagem automaticamente Cria e exibe formatos e tamanhos de imagem diferentes dependendo do URL parâmetros. Por exemplo, abra esta imagem de amostra no Cloudinary e tente mudar o valor w ou a extensão do arquivo na barra de URL.

Os serviços de imagem também têm recursos mais avançados, como a possibilidade de automatizar "corte inteligente" para diferentes tamanhos de imagem e entregar automaticamente imagens WebP em navegadores que oferecem suporte para o formato, em vez de JPEGs, sem alterar o arquivo .

Chrome DevTools mostrando o cabeçalho de tipo de conteúdo WebP para um arquivo disponibilizado pelo Cloudinary

E se a imagem não for exibida corretamente em tamanhos diferentes?

Nesse caso, é necessário usar o elemento <picture> na "direção de arte": fornecendo uma imagem ou corte de imagem diferente em tamanhos diferentes. Para saber mais Confira o codelab Direção de arte.

E a densidade de pixels?

Dispositivos sofisticados têm pixels físicos menores (mais densos). Por exemplo, de última geração pode ter duas ou três vezes mais pixels em cada linha de pixels como um dispositivo mais barato.

Isso pode afetar o tamanho necessário para salvar suas imagens. Não vamos entrar em detalhes aqui, mas você pode saber mais no Codelab "Usar descritores de densidade".

E o tamanho de exibição da imagem?

Você pode usar sizes para que o srcset funcione ainda melhor.

Sem ela, o navegador usa a largura total da janela de visualização ao escolher uma imagem de um srcset. O atributo sizes informa ao navegador a largura que um elemento de imagem será exibido, para que o navegador possa escolher o menor elemento antes de fazer cálculos de layout.

No exemplo abaixo, sizes="50vw" informa ao navegador que esta imagem será exibidos em 50% da largura da janela de visualização.

<img src="small.jpg"
     srcset="small.jpg 500w, medium.jpg 1000w, large.jpg 1500w"
     sizes="50vw"
     alt="…">

Você pode ver isso em ação em simpl.info/sizes e o codelab Como especificar várias larguras de slot.

E quanto ao suporte a navegadores?

srcset e sizes têm suporte de mais de 90% dos navegadores em todo o mundo.

Se um navegador não oferecer suporte a srcset ou sizes, ele voltará a usar apenas o atributo src.

Isso faz com que o srcset e o sizes sejam ótimos aprimoramentos progressivos.

Saiba mais

Confira a seção Otimizar suas imagens. do web.dev para saber mais sobre a otimização de imagens. Para uma apresentação teste o serviço sem custo financeiro "Responsivo" Images" oferecido pela Udacity.