Em 2017, uma página típica carregava dezenas de scripts de terceiros, e os de rastreamento ficavam na mesma fila de rede que o conteúdo pelo qual o usuário realmente esperava. O Firefox Quantum (versão 57) reescreveu seu agendador de requisições de rede, e uma das mudanças usou o banco de dados da Proteção contra Rastreamento para atrasar o carregamento de scripts de domínios de rastreamento enquanto a página ainda estava sendo ativamente carregada e renderizada. O engenheiro da Mozilla Jan Bambas chamou a técnica de tailing.

A opção direta era bloquear os rastreadores de vez, mas o Firefox já tinha a Proteção contra Rastreamento para isso, e o bloqueio quebra sites cuja renderização ou negócio depende desses scripts. A outra opção óbvia era não fazer nada e aceitar que cargas de análise e publicidade competissem com o conteúdo real. O tailing ficou no meio-termo: nada foi desativado, apenas despriorizado.

As requisições a domínios de rastreamento eram retidas apenas enquanto os próprios sub-recursos do site ainda estavam carregando, e somente por até cerca de seis segundos. Scripts adicionados dinamicamente ou carregados de forma assíncrona podiam ser atrasados, enquanto imagens de rastreamento, XHRs e qualquer coisa solicitada por um script de rastreamento eram sempre atrasados. Como as especificações HTML deixam o agendamento e a priorização de downloads a cargo do navegador, a mudança era legal pelas regras da web, e sites bem construídos não tiveram diferença funcional porque nada do que exibiam dependia de um rastreador.

O ganho em desempenho de carregamento de página veio de economizar largura de banda de rede, I/O e CPU para as imagens e scripts de que o próprio site precisava. O custo visível recaiu sobre sites mal construídos: o snippet de teste A/B do Google, que ocultava uma página com opacidade zero até que um script de www.google-analytics.com a revelasse, podia deixar a página em branco por quatro segundos, e um site como o L'Équipe, que chamava a API do Twitter a partir de um script síncrono, falhava quando o script assíncrono atrasado ainda não estava lá. Bambas argumentou que esses sites só funcionavam por sorte, já que as mesmas condições de corrida os quebravam em navegação privada ou com proteção contra rastreamento.

Atrasar em vez de bloquear: reter as requisições a domínios de rastreamento até que os próprios recursos da página terminem, e então liberá-las

Rastreadores raramente são necessários para renderizar uma página, então atrasá-los libera largura de banda, I/O e CPU para os próprios recursos do site sem alterar visivelmente o que o usuário vê.

Atrasar em vez de bloquear mantém o recurso dentro das especificações HTML e não destrói a economia de análise ou de publicidade, apenas a adia.

O banco de dados da Proteção contra Rastreamento já classificava domínios de terceiros, então o agendador ganhou um sinal de prioridade sem construir ou manter uma nova lista.

Os sites que quebraram dependiam de rastreadores para renderizar ou de uma condição de corrida que só vencia porque os servidores de rastreamento respondiam rápido, então as regressões expuseram fragilidade real, e não uma troca equivocada.

Quando você não pode remover um custo, reagende-o: retenha o trabalho de baixo valor até depois que o carregamento visível ao usuário terminar, e você captura a maior parte do benefício sem a briga

O tailing foi lançado dentro do Firefox 57 (Quantum). O explicativo de Bambas de dezembro de 2017 rendeu uma thread no Hacker News com 472 pontos e 261 comentários, além de cobertura do Bleeping Computer e do gHacks. As regressões registradas pela Mozilla, incluindo o snippet de ocultação de página do Google deixando páginas em branco por até quatro segundos, foram para o Bugzilla, e Bambas argumentou que os sites afetados precisavam ser corrigidos para adotar o novo agendamento. Ele acrescentou que medições mais amplas ainda estavam por vir e que testes locais haviam mostrado o ganho enterrado no ruído, então o retorno completo ainda não estava quantificado.

CONFIRA AS EVIDÊNCIAS

As fontes

  1. Firefox 57 delays requests to tracking domains Jan Bambas's blog · janbambas.cz ·
  2. Firefox 57 delays tracking domains gHacks Tech News · ghacks.net ·
  3. Hacker News discussion: Firefox 57 delays requests to tracking domains Hacker News · news.ycombinator.com ·