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

Otimização da interatividade das páginas de detalhes do produto para uma redução de 90% no FID máximo potencial no Lighthouse e uma melhoria de 9% no FID no Relatório de experiência do usuário do Chrome.

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, México e Argentina (com base em visitantes únicos e visualizações de página).

A performance da Web é um foco da empresa há muito tempo, mas recentemente ela formou uma equipe para monitorar a performance e aplicar otimizações em diferentes partes do site.

Este artigo resume o trabalho realizado 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: First Input Delay (FID) e o proxy de laboratório, Total Blocking Time (TBT).

90%

Redução do potencial máximo de 1º atraso de entrada no Lighthouse

9%

Mais usuários percebem o FID como "Rápido" no CrUX

Tarefas longas, First Input Delay e Total Blocking Time

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

O FID (First Input Delay) mede o tempo entre a primeira interação do usuário com uma página (por exemplo, quando ele clica em um link) e o momento em que o navegador pode começar a processar os gerenciadores de eventos em resposta a essa interação. Um site que executa código JavaScript caro provavelmente tem várias tarefas longas, o que acaba afetando negativamente o FID.

Para oferecer uma boa experiência ao usuário, os sites devem ter um First Input Delay de menos de 100 milissegundos: Valores de fid bons são de 2,5 segundos, valores ruins são maiores que 4,0 segundos e qualquer valor entre esses dois extremos precisa ser melhorado.

Embora o site do Mercado Libre estivesse funcionando bem na maioria das seções, eles descobriram no Chrome User Experience Report que as páginas de detalhes do produto tinham um 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. O objetivo era otimizar a interatividade sem interferir em funcionalidades importantes.

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) pode ser medida em laboratório, tem uma boa correlação com o FID no campo e também captura problemas que afetam a interatividade.

No exemplo de rastro abaixo, 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 de bloqueio total (a soma das partes de cada tarefa que excede 50 ms):

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

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

Confira 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 do mundo.

O Mercado Libre usou o WPT para reproduzir a experiência dos usuários escolhendo um tipo de dispositivo e localização semelhantes aos usuários reais. Especificamente, eles escolheram um dispositivo Moto 4G e Dulles, Virginia, porque queriam aproximar a experiência dos usuários do Mercado Livre no México. Ao observar a visualização da linha de execução principal do 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 do produto do Mercado Livre.
Visualização da linha de execução principal das páginas de detalhes do produto do Mercado Livre.

Ao analisar 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 demorou muito para ser analisado, compilado e executado.

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

Usar o Lighthouse para determinar o potencial máximo de 1º atraso de entrada

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

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

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

Com base nisso, o Mercado Libre definiu uma meta para melhorar a pontuação de FID máxima em uma ferramenta de laboratório, como o Lighthouse e o WebPageTest, supondo que essas melhorias afetariam os usuários reais e, portanto, apareceriam em ferramentas de monitoramento de usuários reais, como o Relatório de experiência do usuário do Chrome.

Otimizar tarefas longas

Primeira iteração

Com base no rastreamento da linha de execução principal, o Mercado Livre definiu a meta de otimizar os dois módulos que estavam executando um código caro.

Eles começaram a otimizar a performance do módulo de rastreamento interno. Esse módulo continha uma tarefa de uso intensivo de CPU que não era essencial para o funcionamento do módulo e, portanto, podia ser removida com segurança. Isso levou a uma redução de 2% no JavaScript de todo o site.

Depois disso, eles começaram a trabalhar para melhorar o tamanho geral do pacote:

O Mercado Livre usou o webpack-bundle-analyzer para detectar oportunidades de otimização:

Eles também aplicaram as seguintes otimizações do Babel:

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

Medir o impacto

As mudanças reduziram as tarefas longas consecutivas do Mercado Libre de dois segundos para um segundo:

Visualização da linha de execução principal das páginas de detalhes do produto do Mercado Livre após a primeira rodada de otimizações.
Na hierarquia superior do WPT, há uma barra vermelha longa (na linha Page is Interactive) entre os segundos 3 e 5. Na hierarquia de prioridade da parte de baixo, 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% no possível atraso máximo na primeira entrada:

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

Segunda iteração

A equipe continuou investigando tarefas longas para encontrar melhorias.

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

Com base nessas informações, eles decidiram 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 o carregamento mais inteligente dos diferentes componentes.
  • Adie a hidratação de componentes para permitir um uso mais inteligente da linha de execução principal. Essa técnica é comumente chamada de hidratação parcial.

Medir o impacto

O rastro do WebPageTest resultante mostrou pedaços ainda menores de execução de JS:

Visualização da linha de execução principal das páginas de detalhes do produto do Mercado Livre após a segunda rodada de otimizações.

E o tempo de 1º atraso de entrada máximo no Lighthouse foi reduzido em mais 60%:

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

Visualizar o progresso de usuários reais

Embora ferramentas de teste de laboratório, como o WebPageTest e o 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 mostra métricas sobre a experiência do usuário em destinos populares na Web. Os dados do relatório podem ser obtidos executando consultas no BigQuery, no PageSpeedInsights ou na 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 e abril de 2020. Antes do projeto de otimização, 82% dos usuários percebiam a FID como rápida (abaixo de 100 ms). Depois, mais de 91% dos usuários perceberam a métrica com rapidez.

Próximas etapas

A performance da Web nunca é uma tarefa concluída, e o Mercado Livre entende o valor que essas otimizações trazem aos usuários. Enquanto eles continuam aplicando várias otimizações em todo o site, incluindo prefetching em páginas de listagem de produtos, otimizações de imagem e outras, eles continuam adicionando melhorias às páginas de listagem de produtos para reduzir o tempo de bloqueio total (TBT, na sigla em inglês) e o FID de proxy ainda mais. Essas otimizações incluem:

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

O Mercado Livre tem uma visão holística da performance. Enquanto continua otimizando a interatividade no site, a empresa também começou a avaliar oportunidades de melhoria nas outras duas Core Web Vitals: LCP (Largest Contentful Paint) e CLS (Cumulative Layout Shift).