Como a CMP PubConsent reduziu a INP para os clientes em até 64% usando uma estratégia de rendimento que utiliza as APIs Scheduler do navegador para corrigir problemas de capacidade de resposta identificados usando as Ferramentas para desenvolvedores do Chrome.
As plataformas de gestão de consentimento (CMPs) são ferramentas que ajudam os sites a cumprir regulamentações de privacidade ao receber o consentimento do usuário para o uso de cookies e tecnologias de rastreamento. Além do objetivo principal de garantir a conformidade legal, as CMPs, como scripts de terceiros, também precisam garantir o impacto mínimo no desempenho e na experiência do usuário.
A PubConsent CMP é o produto mais recente da PubTech. Projetada com foco principal na performance, a CMP do PubConsent é leve, garantindo a melhor experiência do usuário e o mínimo impacto no desempenho geral do site.
A introdução da métrica Interaction to Next Paint (INP) permitiu que a PubTech descobrisse problemas com a capacidade de resposta da nossa CMP. Neste estudo de caso, a PubTech mostra como resolveu os problemas de responsividade na plataforma de CMP da PubConsent e como melhorou a INP antes de ela se tornar uma das Core Web Vitals em março de 2024, demonstrando um compromisso inabalável em oferecer a melhor performance possível em um produto de CMP.
Por que o PubTech se importa com o desempenho?
A CMP PubConsent, como a maioria das CMPs, oferece a funcionalidade de gerenciamento de consentimento implementada como um script de terceiros nas páginas do site. Mitigar o impacto na performance da nossa oferta de CMP, incluindo a capacidade de resposta, é essencial para garantir uma integração bem-sucedida.
Ao priorizar a performance e manter o script da CMP do PubConsent leve, os proprietários de sites podem encontrar um equilíbrio delicado entre incorporar funcionalidades valiosas de gerenciamento de consentimento e preservar a qualidade da experiência do usuário.
Dada a importância da funcionalidade que uma CMP oferece e o impacto que ela pode ter na performance, a PubTech definiu as seguintes metas:
- Minimizar o impacto do produto PubConsent CMP na INP.
- Reduza as tarefas longas atribuíveis ao produto CMP.
- Reduza o Tempo total de bloqueio (TBT, na sigla em inglês), que pode ter um efeito negativo no INP de uma página.
Como o INP foi medido
A PubTech usou o Chrome DevTools para realizar uma análise inicial e diagnosticou interações lentas manualmente. Esse fluxo de trabalho permitiu que a PubTech identificasse problemas específicos que afetam a capacidade de resposta da página. Por exemplo, uma interação de clique no produto da CMP para aceitar todos os cookies e, em seguida, dispensar a caixa de consentimento de cookies causou uma tarefa demorada que atrasou uma atualização de renderização na interface do usuário. Como é possível observar na imagem a seguir, a interface do usuário não foi atualizada para mostrar que a caixa de diálogo foi fechada até que a tarefa longa fosse concluída.
Assim como o botão para aceitar todos os cookies, o botão para rejeitar todos os cookies ou personalizar as preferências de cookies segue o mesmo fluxo de trabalho na arquitetura da CMP do PubConsent. Por isso, as melhorias detalhadas neste estudo de caso afetaram várias interações do usuário no produto da CMP.
Esse atraso levou à percepção visual de que o painel estava bloqueado durante a tarefa. Como a atualização da renderização foi bloqueada por um período perceptível longo, o INP da página foi afetado negativamente.
Como a PubTech otimiza o INP para botões e links
Para melhorar o INP, diferentes estratégias de rendimento foram adotadas na CMP do PubConsent.
Gerar tarefas de alta prioridade
O método yieldToMainUiBlocking
mostrado no snippet de código a seguir foi projetado para otimizar tarefas JavaScript de alta prioridade ao gerar com scheduler.yield
se disponível, mas retornar para postTask
com prioridade user-blocking
(alta) se postTask
estiver disponível, finalmente retornando para nada.
O setTimeout
foi evitado aqui porque o método yieldToMainUiBlocking
foi projetado para processar operações internas de configurações da CMP e trabalhos de alta prioridade que precisam manter essa prioridade ao gerar. Isso significa que apenas os navegadores que implementam essas APIs de programação, que no momento da redação deste artigo só estão disponíveis em navegadores baseados no Chromium, se beneficiam das melhorias detalhadas neste estudo de caso. Mesmo assim, essa abordagem foi considerada um aprimoramento progressivo aceitável para essas tarefas de alta prioridade.
function yieldToMainUiBlocking () {
return new Promise((resolve) => {
if ('scheduler' in window) {
if ('yield' in window.scheduler) {
return window.scheduler.yield().then(() => resolve(true));
}
if ('postTask' in window.scheduler) {
return window.scheduler.postTask(() => resolve(true), { priority: 'user-blocking' });
}
}
resolve(false);
});
};
Produtividade em tarefas médias e em segundo plano
O método yieldToMainBackground
mostrado no snippet de código a seguir é usado para dividir tarefas longas com prioridade user-visible
(média) ou background
. A lógica implementa scheduler.yield()
se ela estiver disponível, mas difere por usar postTask
com prioridade média e, por fim, voltar para setTimeout
em navegadores que não são do Chromium.
function yieldToMainBackground () {
return new Promise((resolve) => {
if ('scheduler' in window) {
if ('yield' in window.scheduler) {
return window.scheduler.yield().then(() => resolve(true));
}
if ('postTask' in window.scheduler) {
return window.scheduler.postTask(() => resolve(true), { priority: 'user-visible' });
}
}
setTimeout(() => { resolve(true) }, 0);
});
};
Como a PubTech reduziu ainda mais o TBT com a otimização do layout de renderização
Depois de aplicar a estratégia de rendimento, foi descoberto que a INP melhorou significativamente para a CMP. Na verdade, depois de reduzir significativamente a duração do processamento do manipulador de eventos, foi possível fazer mais melhorias na renderização para a próxima pintura da ação Close UI. Essa ação foi desenvolvida originalmente para remover elementos do DOM. Isso trouxe desafios, especialmente em sites com um número substancial de nós DOM, resultando em um aumento inesperado no trabalho de renderização.
Para resolver o aumento do trabalho de renderização necessário para remover elementos do DOM, foi introduzida uma solução que a equipe chamou de "renderização lenta". Essa abordagem primeiro aplica uma regra CSS display: none
à caixa de diálogo de consentimento da CMP depois que o usuário autoriza a ocultação dela. Em seguida, a remoção de nós do DOM associados à caixa de diálogo da CMP é transferida para um ponto posterior, quando o navegador está inativo, usando requestIdleCallback
. Essa abordagem provou ser muito mais rápida do que a remoção de nós do DOM no momento em que o usuário fechava a caixa de diálogo de consentimento.
Como a PubTech melhorou a biblioteca TCF do IAB e reduziu ainda mais o INP
Depois de resolver a maioria dos problemas de capacidade de resposta da CMP, identificamos outras oportunidades de melhoria em uma das dependências principais: a biblioteca da Estrutura de Transparência e Consentimento (TCF) do IAB.
Os componentes mais caros em termos computacionais dessa biblioteca foram "strings de build" e "envio de consentimento". Esses componentes são partes integrantes da biblioteca TCF do IAB. As otimizações a seguir foram aplicadas a esses componentes em uma bifurcação separada especificamente para as necessidades da PubTech:
- Reutilizar resultados calculados para o processo de decodificação, que é executado para cada callback de terceiros que precisa ler o consentimento do usuário.
- Evitamos e reduzimos loops desnecessários no processo de codificação de restrições do editor, que é executado quando o usuário dá consentimento.
A primeira dessas otimizações reduziu o tempo gasto pela CMP em cada callback de terceiros que se conecta à biblioteca TCF do IAB. A segunda otimização reduziu a duração do processamento incorrido pelo componente "build strings". Essa otimização permitiu uma redução de até 60% dos loops que eram executados toda vez que um usuário expressava consentimento.
Resultados
Com as estratégias de rendimento anteriores e as novas otimizações de layout de renderização, a INP da CMP melhorou até 65%. Como resultado, a capacidade de resposta da experiência do usuário da CMP do PubConsent foi bastante aprimorada.Para alguns anúncios, a visibilidade até melhorou 1, 5% ao otimizar o momento em que os anúncios são solicitados.
Além dessas melhorias, na biblioteca TCF do IAB, foi observado que a INP melhorou em até 77% em dispositivos móveis para os clientes afetados como resultado da redução de até 85% das tarefas longas induzidas pelo TCF. Isso ajudou a reduzir significativamente a sobrecarga de cada callback de terceiros executado durante todo o ciclo de vida de uma página.
O número de origens que passam INP ao usar a CMP do PubConsent melhorou mais de 400%, passando de 13% para 55% em dispositivos móveis. Para alguns clientes, o INP da página foi reduzido em mais da metade, de 470 para 230 milissegundos, devido às otimizações feitas no SDK PubTech.
Conclusão
Os clientes da PubTech reconheceram rapidamente a performance positiva do INP e os resultados das métricas de negócios que resultaram dos nossos esforços de otimização. Outras melhorias de performance para a CMP do PubConsent estão sendo consideradas, aproveitando dados valiosos de monitoramento de usuários reais (RUM, na sigla em inglês) dos clientes. Esses dados rastreiam de perto as regressões e os avanços, impulsionando os esforços de melhoria contínua da PubTech.
Como terceiros, a PubTech também percebeu que tinha a oportunidade de melhorar a performance da Web em grande escala e oferecer uma melhor capacidade de resposta, tudo isso evitando impactos negativos nos KPIs de negócios. Nunca é tarde para começar a implementar esse tipo de melhoria.
Agradecemos especialmente a Luca Coppola, CTO da PubTech, por apoiar este trabalho de inovação, e a Jeremy Wagner, Michal Mocny e Rick Viscomi, do Google.