Aprendizados para adotar o atributo de carregamento padronizado
Meu objetivo com esta postagem é convencer os desenvolvedores e colaboradores de plataformas de CMS (ou seja, as pessoas que desenvolvem os núcleos de CMS) de que agora é o momento de implementar o suporte ao recurso de carregamento lento de imagens no navegador. Também vou compartilhar recomendações sobre como garantir experiências do usuário de alta qualidade e permitir a personalização por outros desenvolvedores ao implementar o carregamento lento. Essas diretrizes vêm da nossa experiência em adicionar suporte ao WordPress e ajudar o Joomla, o Drupal e o TYPO3 a implementar o recurso.
Seja você um desenvolvedor de plataforma de CMS ou um usuário de CMS (ou seja, uma pessoa que cria sites com um CMS), use esta postagem para saber mais sobre os benefícios do carregamento lento no nível do navegador no seu CMS. Confira a seção Próximas etapas para ver sugestões de como incentivar sua plataforma de CMS a implementar o carregamento lento.
Contexto
No ano passado,
o carregamento lento de imagens e iframes usando o atributo loading
passou a fazer parte do padrão HTML do WHATWG
e
foi adotado por vários navegadores.
No entanto, esses marcos apenas estabelecem as bases para uma
Web mais rápida e que economiza mais recursos.
Agora, cabe ao ecossistema da Web distribuída usar o atributo
loading.
Os sistemas de gerenciamento de conteúdo
alimentam cerca de 60% dos sites.
Por isso, essas plataformas desempenham um papel fundamental na adoção de recursos de navegadores mais recentes
na Web. Com alguns CMSs de código aberto conhecidos, como
WordPress,
Joomla e
TYPO3, que já
implementaram suporte ao atributo loading em imagens, vamos dar uma olhada nas
abordagens e nas conclusões que são relevantes para adotar o recurso
em outras plataformas de CMS também. O carregamento lento de mídia é um recurso importante de desempenho da Web
que os sites devem aproveitar em grande escala. Por isso, é recomendável
adotá-lo no nível principal do CMS.
Por que implementar o carregamento lento agora
Padronização
A adoção de recursos de navegador não padronizados em CMSs facilita testes generalizados e pode revelar possíveis áreas de melhoria. No entanto, o consenso geral entre os CMSs é que, enquanto um recurso do navegador não for padronizado, ele deve ser implementado como uma extensão ou um plug-in para a respectiva plataforma. Somente após a padronização, um recurso pode ser considerado para adoção no núcleo da plataforma.
Suporte ao navegador
O suporte do navegador ao recurso é uma preocupação semelhante: a maioria dos usuários do CMS precisa se beneficiar do recurso. Se houver uma porcentagem considerável de navegadores em que o recurso ainda não é compatível, ele precisa garantir que, pelo menos, não tenha efeitos adversos para eles.
Limites de distância da janela de visualização
Uma preocupação comum com as implementações de carregamento lento é que, em princípio, elas aumentam a probabilidade de uma imagem não ser carregada quando se torna visível na janela de visualização do usuário, porque o ciclo de carregamento começa em um estágio posterior. Ao contrário das soluções anteriores baseadas em JavaScript, os navegadores abordam isso de forma conservadora e podem ajustar a abordagem com base em dados reais da experiência do usuário, minimizando o impacto. Assim, o carregamento lento no nível do navegador deve ser seguro para adoção por plataformas de CMS.
Recomendações de experiência do usuário
Exigir atributos de dimensão em elementos
Para evitar mudanças de layout, há muito tempo
recomendamos que
conteúdos incorporados, como imagens ou iframes, sempre incluam os atributos de dimensão width e height,
para que o navegador possa inferir a proporção desses elementos antes de
carregá-los. Essa recomendação é relevante se um elemento
está sendo carregado lentamente ou não. No entanto, devido à
probabilidade 0,1% maior de uma imagem não ser totalmente carregada uma vez na janela de visualização,
ela se torna um pouco mais aplicável com o carregamento lento.
Os CMSs devem fornecer atributos de dimensão em todas as imagens e iframes. Se isso não for possível para todos os elementos, recomendamos pular o carregamento lento de imagens que não fornecem esses dois atributos.
Evite o carregamento lento de elementos acima da dobra
No momento, recomendamos que os CMSs adicionem atributos loading="lazy" apenas a
imagens e iframes posicionados abaixo da dobra para evitar um atraso
na métrica Largest Contentful Paint, que, em alguns casos, pode ser
significativo, conforme descoberto em julho de 2021. No entanto, é preciso
reconhecer que é complexo avaliar a posição de um elemento
em relação à janela de visualização antes do processo de renderização. Isso se aplica especialmente
se o CMS usa uma abordagem automatizada para adicionar atributos loading, mas mesmo
com base na intervenção manual, vários fatores, como os diferentes tamanhos de janela de visualização
e proporções, precisam ser considerados. Ainda assim, é altamente recomendável omitir imagens principais e outras imagens ou iframes que provavelmente vão aparecer acima da dobra do carregamento lento.
Evitar um substituto de JavaScript
Embora o JavaScript possa ser usado para
fornecer carregamento lento para navegadores que (ainda) não são compatíveis com o atributo loading,
esses mecanismos sempre dependem da remoção inicial do atributo src de uma
imagem ou iframe, o que causa um atraso para os navegadores que são compatíveis com o
atributo. Além disso, implementar uma solução baseada em JavaScript nos
front-ends de um CMS de grande escala aumenta a área de superfície para possíveis problemas,
o que é parte do motivo pelo qual nenhum CMS importante havia adotado o carregamento lento em seu núcleo antes do
recurso padronizado do navegador.
Recomendações técnicas
Ativar o carregamento lento por padrão
A recomendação geral para CMSs que implementam o carregamento lento no navegador é
ativá-lo por padrão, ou seja, loading="lazy" precisa ser adicionado a imagens e
iframes, de preferência
apenas para os elementos que incluem atributos de dimensão.
Ativar o recurso por padrão resulta em uma economia maior de recursos de rede
do que se ele tivesse que ser ativado manualmente, por exemplo, para cada
imagem.
Sempre que possível, loading="lazy" deve ser
adicionado apenas a elementos que provavelmente aparecem abaixo da dobra.
Embora esse requisito possa ser complexo de implementar para um CMS devido à falta de reconhecimento do lado do cliente e aos vários tamanhos de janela de visualização, recomendamos pelo menos usar heurísticas aproximadas para omitir elementos como imagens principais que provavelmente vão aparecer acima da dobra do carregamento lento.
Permitir modificações por elemento
Embora loading="lazy" deva ser adicionado a imagens e iframes por padrão, é
fundamental permitir a omissão do atributo em determinadas imagens, por exemplo, para
otimizar a LCP. Se o público do CMS for, em média, considerado mais experiente em tecnologia, esse poderá ser um controle de interface exposto para cada imagem e iframe, permitindo desativar o carregamento lento para esse elemento.
Como alternativa ou além disso, uma API pode ser exposta a desenvolvedores terceirizados
para que eles possam fazer mudanças semelhantes por meio de código.
O WordPress, por exemplo, permite pular o atributo loading para uma
tag HTML ou contexto inteiro
ou para um
elemento HTML específico no conteúdo.
Adaptar o conteúdo atual
De modo geral, há duas abordagens para adicionar o atributo loading a
elementos HTML em um CMS:
- Adicione o atributo no editor de conteúdo no back-end, salvando-o de forma persistente no banco de dados.
- Adicione o atributo imediatamente ao renderizar o conteúdo do banco de dados no front-end.
É recomendável que os CMSs adicionem o atributo dinamicamente durante a renderização para que os benefícios do carregamento lento também sejam aplicados ao conteúdo atual. Se o atributo só pudesse ser adicionado pelo editor, apenas as partes novas ou modificadas recentemente do conteúdo receberiam os benefícios, reduzindo drasticamente o impacto do CMS na economia de recursos de rede. Além disso, adicionar o atributo em tempo real vai permitir modificações futuras com facilidade, caso os recursos de carregamento lento no navegador sejam expandidos.
No entanto, a adição do atributo em tempo real precisa atender a um atributo loading
potencialmente existente em um elemento e permitir que esse atributo tenha
prioridade. Dessa forma, o CMS ou uma extensão dele também pode implementar a
abordagem orientada pelo editor sem causar um conflito com atributos duplicados.
Otimizar o desempenho do lado do servidor
Ao adicionar o atributo loading ao conteúdo em tempo real usando, por exemplo, um
middleware do lado do servidor, a velocidade é um fator importante. Dependendo do CMS, o atributo pode ser adicionado por meio de travessia de DOM ou expressões regulares, sendo que a última é recomendada para performance.
O uso de expressões regulares precisa ser mínimo, por exemplo, uma única regex
que coleta todas as tags img e iframe no conteúdo, incluindo os
atributos, e adiciona o atributo loading a cada string de tag, conforme
aplicável. O WordPress, por exemplo,
tem uma única expressão regular geral para realizar várias operações em tempo real em determinados elementos,
em que a adição de loading="lazy" é apenas uma, usando uma única expressão regular
para facilitar vários recursos. Além disso, essa forma de otimização é
outro motivo pelo qual a adoção do carregamento lento no núcleo de um CMS é recomendada em vez de uma
extensão, já que permite uma melhor otimização de desempenho do lado do servidor.
Próximas etapas
Verifique se há um tíquete de solicitação de recurso para adicionar suporte ao recurso no seu CMS ou abra um novo, se ainda não houver. Use referências a esta postagem conforme necessário para apoiar sua proposta.
Envie um tweet para mim (felixarntz@) se tiver dúvidas ou comentários ou para listar seu CMS nesta página se o suporte ao carregamento lento no navegador tiver sido adicionado. Se você encontrar outros desafios, também quero saber mais sobre eles para encontrar uma solução.
Se você é desenvolvedor de uma plataforma de CMS, estude como outros CMSs implementaram o carregamento lento:
Você pode usar os aprendizados da sua pesquisa e as recomendações técnicas desta postagem para começar a contribuir com o código do seu CMS, por exemplo, na forma de um patch ou uma solicitação de pull.