Melhores maneiras de pré-carregar imagens usando JavaScript, CSS e HTML

Uma das coisas mais importantes que você pode fazer para melhorar a experiência do usuário em seu site é garantir que as pessoas não percam seu tempo esperando o carregamento de alguma imagem ou outro elemento.

A rapidez com que uma página da Web e todo o seu conteúdo são carregados depende de um grande número de fatores e alguns deles estarão fora do seu controle. No entanto, devemos tentar o nosso melhor como desenvolvedores da Web para tornar a experiência de navegação o mais perfeita possível.

Neste tutorial, mostrarei diferentes técnicas para pré-carregar imagens em uma página da Web para uma experiência de usuário tranquila.

A necessidade de pré-carregar imagens

Começaremos o tutorial discutindo primeiro por que você pode precisar pré-carregar imagens.

Digamos que você esteja criando um site de portfólio para um corretor de imóveis, onde eles podem mostrar casas à venda. O agente quer que você mostre uma lista de casas com uma imagem do exterior das casas. Eles também querem que você projete a página de forma que, ao passar o mouse sobre a imagem de uma casa, carregue outra imagem do interior da casa com um link para ver todas as outras imagens.

O problema aqui é que a imagem do interior da casa só vai começar a carregar quando o usuário passar o mouse sobre a imagem. Isso significa que eles não verão nenhuma imagem por alguns momentos após o evento de foco inicial, dependendo da velocidade da Internet. Você pode ver esse problema na seguinte demonstração do CodePen:

O pré-carregamento das imagens evitará esse atraso no carregamento da imagem ao passar o mouse. Além disso, algumas imagens grandes podem demorar um pouco para carregar, por isso é melhor pré-carregá-las para uma melhor experiência do usuário.

Pré-carregando imagens usando HTML

Você provavelmente já está familiarizado com o link marca em HTML. Geralmente o usamos para carregar uma folha de estilo CSS externa, mas você também pode usá-lo para carregar outros tipos de recursos. Existem dois atributos importantes do link marcação.

o href atributo que é usado para fornecer o caminho para o recurso que queremos buscar e o rel atributo que especifica a relação do recurso com o documento que o contém. Com uma folha de estilo CSS, a tag do link fica assim:

1
 rel="stylesheet" href="navigation.css" />

o rel O atributo pode receber muitos valores válidos. Uma delas é preload que usaremos para pré-carregar nossas imagens. o preload O atributo informa ao navegador para buscar e armazenar em cache preventivamente o recurso vinculado, pois ele será necessário na página atual.

Você também precisa do as atributo quando o valor de rel atributo é definido como preload. Isso especificará o tipo de conteúdo que está sendo carregado pelo link marcação. Esse atributo serve a muitos propósitos importantes, como aplicar a política de segurança de conteúdo correta, priorizar a solicitação, etc. Ignorá-lo pode impedir que sua imagem seja pré-carregada.

Vamos carregar nossa imagem da seguinte forma div elemento:

1
 class="hover-me">

Em seguida, aplique o seguinte CSS ao div elemento. Como você pode ver, o URL da imagem de plano de fundo muda sempre que alguém passa o mouse sobre o div elemento.

1
div.hover-me {
2
  width: 640px;
3
  height: 360px;
4
  background: url("https://picsum.photos/id/128/1920/1080");
5
  background-size: contain;
6
  cursor: pointer;
7
  margin: 0 auto;
8
  position: relative;
9
}
10
11
div.hover-me::before {
12
  content: "Lake";
13
  background: black;
14
  color: white;
15
  position: absolute;
16
  top: 0.75rem;
17
  left: 1rem;
18
  padding: 0.5rem;
19
  font-size: 1.5rem;
20
  border-radius: 5px;
21
}
22
23
div.hover-me:hover {
24
  background: url("https://picsum.photos/id/296/1920/1080");
25
  background-size: contain;
26
}
27
28
div.hover-me:hover::before {
29
  content: "Mountains";
30
}

A imagem que aparece quando passamos o mouse sobre o div elemento é pré-carregado usando a marcação a seguir. Você deve idealmente colocar o link marca dentro do head tag da sua página da web.

1
 rel="preload" as="image" href="https://picsum.photos/id/296/1920/1080" />

A seguinte demonstração do CodePen mostra o pré-carregamento da imagem em ação:

Pré-carregando imagens usando CSS

Você deve ter notado na seção anterior que ambas as imagens que usamos foram aplicadas como um background para o div elemento. No entanto, apenas um deles foi baixado pelo navegador. A imagem que foi aplicada como background em foco foi baixado somente após o hover evento ocorreu.

Na seção anterior, forçamos o download da imagem flutuante com a ajuda do HTML. No entanto, também podemos enganar o navegador para baixar a imagem flutuante aplicando-a como imagem de fundo a algum outro elemento na página da web. Outra opção envolve definir o URL da imagem como um valor do content propriedade.

Eu prefiro usar o body elemento junto com o ::before ou ::after pseudo-elementos. Os URLs que desejo baixar serão definidos como um valor do content propriedade de qualquer um dos pseudo-elementos.

Uma coisa importante a ter em mente aqui é que precisamos empurrar os pseudo-elementos para longe da tela para evitar que seu conteúdo apareça acidentalmente na tela. O seguinte CSS cuida de tudo isso para nós:

1
body::before {
2
  content: url("https://picsum.photos/id/296/1920/1080");
3
  position: absolute;
4
  top: -9999rem;
5
  left: -9999rem;
6
  opacity: 0;
7
}

Eu também configurei o opacity para 0 como medida cautelar. Tenha em mente que você não deve definir o display propriedade para none para esconder o elemento. Nesse caso, é muito mais provável que o navegador não baixe a imagem.

Você pode ver que a imagem que precisamos ao passar o mouse está pré-carregada na seguinte demonstração do CodePen:

Pré-carregando imagens usando JavaScript

Também é possível pré-carregar imagens usando JavaScript. Este método oferece maior controle sobre a maneira como você pré-carrega as imagens. O pré-carregamento de imagens usando JavaScript também é mais conveniente em situações em que você precisa carregar um grande número de imagens. No entanto, só funcionará se a execução do JavaScript não estiver desativada no navegador.

A seguinte função pode nos ajudar a pré-carregar qualquer imagem em JavaScript.

1
function preload_image(im_url) {
2
  let img = new Image();
3
  img.src = im_url;
4
}

A função aceita o caminho para uma imagem que você deseja pré-carregar como parâmetro. Dentro da função, usamos o construtor de imagem para criar uma nova instância de HTMLImageElement. Depois de criar a instância do elemento de imagem, definimos o valor de seu src propriedade ao caminho da imagem que queremos pré-carregar.

Tudo o que é necessário agora é uma chamada para o preload_image() funcionar como mostrado abaixo:

1
preload_image("https://picsum.photos/id/296/1920/1080");

Você pode ver o pré-carregamento da imagem JavaScript em ação na seguinte demonstração do CodePen:

Pensamentos finais

Neste tutorial, aprendemos sobre três técnicas diferentes para pré-carregar imagens. Usando o link tag em HTML nos permite começar a carregar as imagens o mais cedo possível. Por outro lado, é muito mais conveniente usar JavaScript quando você deseja pré-carregar várias imagens. Você também pode controlar a ordem em que as imagens são pré-carregadas com JavaScript. Dessa forma, podemos garantir que o pré-carregamento da imagem não impeça o carregamento do conteúdo principal primeiro.

Deixe uma resposta