En 2017, una página típica cargaba decenas de scripts de terceros, y los de rastreo ocupaban la misma cola de red que el contenido que el usuario realmente estaba esperando. Firefox Quantum (versión 57) reescribió su planificador de solicitudes de red, y uno de los cambios usó la base de datos de Protección contra Rastreo para retrasar la carga de scripts de dominios de rastreo mientras una página todavía se estaba cargando y renderizando activamente. El ingeniero de Mozilla Jan Bambas llamó a la técnica tailing.
La opción contundente era bloquear los rastreadores de plano, pero Firefox ya tenía la Protección contra Rastreo para eso, y el bloqueo rompe sitios cuyo renderizado o negocio depende de esos scripts. La otra opción obvia era no hacer nada y aceptar que las cargas útiles de analítica y publicidad compitieran con el contenido real. El tailing dividió la diferencia: nada se deshabilitó, solo se le bajó la prioridad.
Las solicitudes a dominios de rastreo se retenían solo mientras los propios subrecursos del sitio seguían cargándose, y solo durante un máximo de unos seis segundos. Los scripts añadidos dinámicamente o cargados de forma asíncrona podían retrasarse, mientras que las imágenes de rastreo, las XHR y cualquier cosa que solicitara un script de rastreo siempre se retrasaban. Dado que las especificaciones HTML dejan la programación y priorización de descargas al navegador, el cambio era legal según las reglas de la web, y los sitios bien construidos no vieron ninguna diferencia funcional porque nada de lo que mostraban dependía de un rastreador.
La ganancia en rendimiento de carga de página provino de ahorrar ancho de banda de red, E/S y CPU para las imágenes y scripts que el propio sitio necesitaba. El costo visible recayó en los sitios mal construidos: el fragmento de pruebas A/B de Google, que ocultaba una página con opacidad cero hasta que un script de www.google-analytics.com la mostraba, podía dejar la página en blanco durante cuatro segundos, y un sitio como L'Équipe que llamaba a la API de Twitter desde un script síncrono fallaba cuando el script asíncrono retrasado aún no estaba allí. Bambas argumentó que esos sitios solo habían funcionado por suerte, ya que esas mismas condiciones de carrera los rompían en navegación privada o con protección contra rastreo.
Retrasar en lugar de bloquear: retener las solicitudes a dominios de rastreo hasta que los propios recursos de la página terminen, y luego liberarlas
Rara vez se necesita un rastreador para renderizar una página, así que retrasarlos libera ancho de banda, E/S y CPU para los propios recursos del sitio sin cambiar de forma visible lo que ve el usuario.
Retrasar en lugar de bloquear mantiene la función dentro de las especificaciones HTML y no destruye la economía de la analítica ni de la publicidad, solo la pospone.
La base de datos de Protección contra Rastreo ya clasificaba los dominios de terceros, así que el planificador obtuvo una señal de prioridad sin crear ni mantener una nueva lista.
Los sitios que se rompieron dependían de rastreadores para renderizar o de una condición de carrera que solo ganaban porque los servidores de rastreo respondían rápido, así que las regresiones expusieron una fragilidad real en lugar de un intercambio equivocado.
Cuando no puedes eliminar un costo, reprogramalo: retén el trabajo de bajo valor hasta después de que termine la carga visible para el usuario, y capturas la mayor parte del beneficio sin la pelea
El tailing se incluyó en Firefox 57 (Quantum). La explicación de Bambas de diciembre de 2017 generó un hilo de Hacker News con 472 puntos y 261 comentarios, además de cobertura de Bleeping Computer y gHacks. Las regresiones que Mozilla registró, incluido el fragmento de ocultación de página de Google que dejaba páginas en blanco hasta cuatro segundos, se enviaron a Bugzilla, y Bambas argumentó que los sitios afectados necesitaban corregirse para adoptar la nueva programación. Añadió que aún estaba por llegar una medición más amplia y que las pruebas locales habían mostrado la ganancia enterrada en el ruido, por lo que el beneficio completo aún no estaba cuantificado.
CONSULTA LAS PRUEBAS
Las fuentes
- Firefox 57 delays requests to tracking domains Jan Bambas's blog · janbambas.cz ·
- Firefox 57 delays tracking domains gHacks Tech News · ghacks.net ·
- Hacker News discussion: Firefox 57 delays requests to tracking domains Hacker News · news.ycombinator.com ·