Como o Mercado Livre otimizou as Métricas da Web (TBT/FID)

Otimização da interatividade das páginas de detalhes do produto para reduzir em 90% o potencial máximo de FID no Lighthouse e uma melhoria de 9% na FID no Chrome User Experience Report.

Carlos Aranha
Carlos Aranha
Demián Renzulli
Demián Renzulli
Joan Baca
Joan Baca

O Mercado Livre é o maior ecossistema de e-commerce e pagamentos da América Latina. Ele está presente em 18 países e é líder de mercado no Brasil, no México e na Argentina, com base em visitantes únicos e visualizações de página.

O desempenho na Web é o foco da empresa há muito tempo, mas eles recentemente formaram uma equipe para monitorar o desempenho e aplicar otimizações em diferentes partes do site.

Neste artigo, resumimos o trabalho feito por Guille Paz, Pablo Carminatti e Oleh Burkhay, da equipe de arquitetura de front-end do Mercado Livre, para otimizar uma das Core Web Vitals: latência na primeira entrada (FID, na sigla em inglês) e o proxy do laboratório, Tempo total de bloqueio (TBT, na sigla em inglês).

90%

de redução no potencial máximo de FID no Lighthouse

9%

Mais usuários percebem a FID como "rápida" no CrUX

Tarefas longas, latência na primeira entrada e tempo total de bloqueio

A execução de códigos JavaScript caros pode levar a tarefas longas, que são executadas por mais de 50 ms na linha de execução principal do navegador.

A latência na primeira entrada (FID, na sigla em inglês) mede o tempo entre o momento em que o usuário interage com uma página pela primeira vez (por exemplo, ao clicar em um link) e o momento em que o navegador consegue começar a processar gerenciadores de eventos em resposta a essa interação. Um site que executa códigos JavaScript caros provavelmente terá várias tarefas longas, o que acaba afetando negativamente a FID.

Para oferecer uma boa experiência ao usuário, os sites precisam ter uma latência na primeira entrada de menos de 100 milissegundos: Os valores de fid bons são de 2,5 segundos, os valores ruins são maiores do que 4,0 segundos e qualquer valor entre eles precisa ser melhorado

Embora o site do Mercado Livre tenha um bom desempenho na maioria das seções, eles descobriram no Relatório de experiência do usuário do Chrome que as páginas de detalhes do produto tinham uma FID ruim. Com base nessas informações, a empresa decidiu concentrar os esforços em melhorar a interatividade das páginas de produtos no site.

Versões para dispositivos móveis e computadores de uma página de detalhes do produto do Mercado Livre.
Versões para dispositivos móveis e computadores de uma página de detalhes do produto do Mercado Livre.

Essas páginas permitem que o usuário realize interações complexas. A meta era a otimização de interatividade, sem interferir com uma funcionalidade valiosa.

Medir a interatividade das páginas de detalhes do produto

A FID requer um usuário real e, portanto, não pode ser medida no laboratório. No entanto, a métrica Tempo total de bloqueio (TBT, na sigla em inglês) é mensurável por laboratório, correlaciona bem com a FID no campo e também captura problemas que afetam a interatividade.

No trace a seguir, por exemplo, embora o tempo total gasto na execução de tarefas na linha de execução principal seja de 560 ms, apenas 345 ms desse tempo são considerados tempo total de bloqueio (a soma das partes de cada tarefa que excede 50 ms):

Linha do tempo de tarefas na linha de execução principal mostrando o tempo de bloqueio

O Mercado Livre usou o TBT como uma métrica de proxy no laboratório para medir e melhorar a interatividade das páginas de detalhes dos produtos no mundo real.

Esta é a abordagem geral que eles adotaram:

Usar o WebPageTest para visualizar tarefas longas

O WebPageTest (WPT) é uma ferramenta de desempenho da Web que permite executar testes em dispositivos reais em diferentes locais ao redor do mundo.

O Mercado Livre usou a WPT para reproduzir a experiência dos usuários, escolhendo um tipo de dispositivo e um local semelhantes aos usuários reais. Especificamente, eles escolheram um dispositivo Moto 4G e Dulles, Virgínia, porque queriam se aproximar da experiência dos usuários do Mercado Livre no México. Ao observar a visualização da linha de execução principal da WPT, o Mercado Livre descobriu que havia várias tarefas longas consecutivas bloqueando a linha de execução principal por dois segundos:

Visualização da linha de execução principal das páginas de detalhes dos produtos do Mercado Libre.
Visualização da conversa principal das páginas de detalhes dos produtos do Mercado Libre.

Analisando a hierarquia correspondente, eles descobriram que uma parte considerável desses dois segundos veio do módulo de análise. O tamanho do pacote principal do aplicativo era grande (950 KB) e levava muito tempo para analisar, compilar e executar.

Visualização em cascata das páginas de detalhes do produto.
Visualização em cascata das páginas de detalhes dos produtos do Mercado Libre.

Usar o Lighthouse para determinar a FID do potencial máximo

O Lighthouse não permite escolher entre diferentes dispositivos e locais, mas é uma ferramenta muito útil para diagnosticar sites e receber recomendações de performance.

Ao executar o Lighthouse nas páginas de detalhes do produto, o Mercado Livre descobriu que o FID do potencial máximo era a única métrica marcada em vermelho, com um valor de 1710ms.

Métricas do Lighthouse em um relatório PSI para as páginas de detalhes do produto do Mercado Libre.

Com base nisso, o Mercado Livre definiu uma meta de melhorar a pontuação de FID de potencial máximo em uma ferramenta de laboratório, como o Lighthouse e o WebPageTest, presumindo que essas melhorias afetariam os usuários reais e, portanto, aparecerão em ferramentas de monitoramento de usuários reais, como o Chrome User Experience Report.

Otimizar tarefas longas

Primeira iteração

Com base no trace de linha de execução principal, o Mercado Livre definiu a meta de otimizar os dois módulos que executavam códigos caros.

A empresa começou a otimizar o desempenho do módulo de monitoramento interno. Esse módulo continha uma tarefa pesada da CPU que não era essencial para o funcionamento do módulo e, portanto, poderia ser removida com segurança. Isso levou a uma redução de 2% no JavaScript para todo o site.

Depois disso, a equipe começou a melhorar o tamanho geral do pacote:

O Mercado Livre usou o webpack-bundle-analyzer (link em inglês) para detectar oportunidades de otimização:

A equipe também aplicou as seguintes otimizações do Babel:

Como resultado dessas otimizações, o tamanho do pacote foi reduzido em aproximadamente 16%.

Medir o impacto

Com essas mudanças, as tarefas longas consecutivas do Mercado Livre diminuíram de dois segundos para um segundo:

Visualização da conversa principal das páginas de detalhes dos produtos do Mercado Libre após a primeira rodada de otimizações.
Na cascata superior da WPT, há uma longa barra vermelha (na linha Page is Interactive) entre os segundos 3 e 5. Na hierarquia inferior, a barra foi dividida em partes menores, ocupando a linha de execução principal por períodos mais curtos.

O Lighthouse mostrou uma redução de 57% na latência máxima na primeira entrada:

Métricas do Lighthouse em um relatório PSI para as páginas de detalhes do produto do Mercado Libre após a primeira rodada de otimizações.

Segunda iteração

A equipe continuou se aprofundando em tarefas longas para encontrar melhorias subsequentes.

Visão detalhada da visualização da linha de execução principal das páginas de detalhes do produto do Mercado Libre após a primeira rodada de otimizações.
A hierarquia (não na imagem) ajudou o Mercado Livre a identificar quais bibliotecas estavam usando muito a linha de execução principal (linha Linha de execução principal do navegador), e a linha Página é interativa mostra claramente que essa atividade da linha de execução principal está bloqueando a interatividade.

Com base nessas informações, a empresa decidiu implementar as seguintes mudanças:

  • Continue reduzindo o tamanho do pacote principal para otimizar o tempo de compilação e análise, por exemplo, removendo dependências duplicadas nos diferentes módulos.
  • Aplique a divisão de código no nível do componente para dividir o JavaScript em partes menores e permitir um carregamento mais inteligente dos diferentes componentes.
  • Adie a hidratação do componente para permitir um uso mais inteligente da linha de execução principal. Essa técnica é conhecida como hidratação parcial.

Medir o impacto

O trace de WebPageTest resultante mostrou blocos ainda menores de execução de JS:

Visualização da conversa principal das páginas de detalhes dos produtos do Mercado Libre após uma rodada de otimizações.

Além disso, o tempo de FID do potencial máximo no Lighthouse foi reduzido em 60%adicional:

Métricas do Lighthouse em um relatório PSI para as páginas de detalhes do produto do Mercado Libre após a primeira rodada de otimizações.

Visualize o progresso de usuários reais

Embora ferramentas de teste de laboratório como WebPageTest e Lighthouse sejam ótimas para iterar soluções durante o desenvolvimento, o verdadeiro objetivo é melhorar a experiência para usuários reais.

O Relatório de experiência do usuário do Chrome apresenta métricas sobre a experiência real dos usuários do Chrome em destinos comuns na Web. Os dados do relatório podem ser obtidos executando consultas no BigQuery, PageSpeedInsights ou API CrUX.

O painel CrUX é uma maneira fácil de visualizar o progresso das principais métricas:

.
Progresso da FID do Mercado Livre entre janeiro de 2020 e abril de 2020. Antes do projeto de otimização, 82% dos usuários notaram a FID como rápida (abaixo de 100 ms). Mais de 91% dos usuários passaram a perceber a métrica como sendo rápida.

Próximas etapas

A performance na Web nunca é uma tarefa concluída, e o Mercado Livre entende o valor que essas otimizações trazem aos usuários. Embora a empresa continue aplicando várias otimizações em todo o site, incluindo a pré-busca em páginas de informações do produto, otimizações de imagem e outras, a empresa continua adicionando melhorias às páginas de informações do produto para reduzir o tempo total de bloqueio (TBT, na sigla em inglês), usando FID de proxy e muito mais. Essas otimizações incluem:

  • Iteração na solução de divisão de código.
  • Melhorar a execução de scripts de terceiros.
  • Melhorias contínuas no agrupamento de recursos no nível do bundler (webpack).

O Mercado Livre tem uma visão holística da performance. Então, embora continue otimizando a interatividade no site, também começou a avaliar oportunidades de melhoria nas outras duas Core Web Vitals atuais: LCP (Maior exibição de conteúdo) e CLS (Mudança de layout cumulativa) ainda mais.