Dev (Back & Front)ARTIGO

Aumente o desempenho da sua aplicação Angular utilizando Lazy Load para imagens

Neste artigo, Silvana Lima mostra como podemos melhorar o desempenho de aplicações Angular usando a técnica Lazy Load para Imagens.

Aumente o desempenho da sua aplicação Angular utilizando Lazy Load para imagens
Imagem: Silvana Lima

A parcela de recursos de imagens no payload normal de um site pode ser significativo. Para não ser necessário diminuir esses recursos do projeto, podemos optar pelo lazy loading.

Essa solução diminui o payload da página inicial e o tempo de carregamento, mas sem limitar o conteúdo.

O que é carregamento preguiçoso para imagens?

A técnica consiste em carregar as imagens da aplicação somente quando entrarem no campo visível do usuário de maneira non-blocking.

Essa técnica adia recursos não críticos no tempo de carregamento da página. Então, esses recursos são carregados apenas no momento em que são necessários.

Cenário sem Lazy Load

Veja, neste exemplo, sem fazer o lazy loading. Observamos que as 10 imagens são carregadas de uma vez, sem a menor necessidade. O usuário não vê as 10 imagens inicialmente, portanto, elas não precisam ser carregadas de uma vez.

Melhorando o cenário com Lazy Load

Agora vamos melhorar este cenário. Para isso, vamos utilizar a lib ng-lazyload-image.

Precisamos instalar – basta usar esse comando:

bash
npm install ng-lazyload-image --save

Depois incluímos no app.module:

bash
import { LazyLoadImageModule } from 'ng-lazyload-image';

Adicione LazyLoadImageModule no seu import do app.module:

bash
LazyLoadImageModule

Ficando assim:

Neste momento, já podemos configurar nosso template.

Primeiro, no elemento img passamos três configurações:

  • Default Image: imagem padrão
  • Error Image: imagem que vai retornar caso tenha erro
  • Lazy Load: responsável por fazer o lazy loading das suas imagens
bash
[defaultImage]="defaultImage"
[errorImage]="errorImage"
[lazyLoad]="image"

Em nosso componente passo o valor defaultImage, errorImage e minha lista de imagens em image.

javascript
errorImage = 'https://i.imgur.com/XkU4Ajf.png';
defaultImage = 'https://www.placecage.com/1000/1000';
images = [
'https://images.unsplash.com/photo-1467932760935-519284fc87fa?dpr=2&auto=compress,format&fit=crop&w=1199&h=800&q=80',
'https://images.unsplash.com/photo-1468103933896-2c34a78104c2?dpr=2&auto=compress,format&fit=crop&w=1199&h=799&q=80',
'https://images.unsplash.com/photo-1471201187657-6406da15e43b?dpr=2&auto=compress,format&fit=crop&w=1199&h=1199&q=80',
'https://images.unsplash.com/photo-1483488792196-78bedff29c21?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80',
'https://images.unsplash.com/photo-1526336024174-e58f5cdd8e13?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=634&q=80',
'https://images.unsplash.com/photo-1493406300581-484b937cdc41?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80',
'https://assets.imgix.net/unsplash/bridge.jpg?auto=compress&w=900&h=600&fit=crop&crop=focalpoint&fp-debug=1&fp-x=.41&fp-y=.43',
'https://assets.imgix.net/unsplash/pineneedles.jpg?fp-y=.43&fp-x=.41&fp-debug=1&crop=focalpoint&fit=crop&h=600&w=900&auto=compress',
'https://assets.imgix.net/unsplash/turntable.jpg?fp-y=.43&fp-x=.41&fp-debug=1&crop=focalpoint&fit=crop&h=600&w=900&auto=compress',
'https://assets.imgix.net/unsplash/transport.jpg?fp-y=.43&fp-x=.41&fp-debug=1&crop=focalpoint&fit=crop&h=600&w=900&auto=compress'
];

Ficando assim:

Agora temos o cenário com Lazy Load para Imagens

Considerações importantes:

Essa lib pode ser usada em Apps Ionic. Para mais informações, veja aqui.

Verifique se o suporte dessa lib atende suas necessidades:

Para mais informações a respeito da lib, veja aqui.

Conclusão

Portanto, vimos que lazy load é um mecanismo inteligente – carrega apenas as imagens que estão visíveis na tela, deixando todo resto para depois.

Quando utilizamos em imagens, significa que irá carregar apenas quando estiver no viewport (área visível do navegador), aumentando a velocidade do carregamento da página.

O exemplo está disponível no meu Git.

Se esse artigo foi útil, compartilhe e me ajude a chegar em mais pessoas.

Front-End Developer, mas não se restringe a isso. Entusiasta de novas tecnologias e ciclista amadora. Trabalha para fazer a diferença no mundo e contribuir de forma positiva. Atualmente trabalha no Grupo Band Rádios.

Ver perfil