В Firefox реализована техника отложенного выполнения кода отслеживания перемещений

В опубликованном в ноябре выпуске Firefox 57, помимо появления опции для блокирования внешних блоков, занесённых в чёрный список disconnect.me, без упоминания в списке изменений была добавлена ещё одна полезная функция для снижения негативного влияния внешнего кода. В браузере была переработана логика построения очерёдности загрузки контента, в результате чего сторонний JavaScript-код и изображения, связанные с отслеживанием поведения пользователя и перемещений между сайтами, стали загружаться в самую последнюю очередь и только после того как загрузится остальное содержимое. Также были добавлены настройки, позволяющие загружать подобный код не сразу, а после определённой задержки (network.http.tailing.delay-quantum-after-domcontentloaded и network.http.tailing.delay-quantum в about: config).

Метод отложенной загрузки применяется для счётчиков, web-систем аналитики, iframe-блоков, виджетов социальных сетей, рекламных блоков и изображений, уличённых в отслеживании пользователей вопреки установке заголовка Do Not Track и занесённых в чёрный список disconnect.me, который также применяется в системе блокирования отслеживания перемещений. Загрузка подобных компонентов откладывается до завершения загрузки всех остальных ресурсов страницы, если не истёк таймаут, установленный по умолчанию в 6 секунд (network.http.tailing.delay-max в about: config). Отложенная загрузка применяется только для скриптов, добавляемых динамически или определённых с флагом async, а также для всех счётиков-изображений. Для отключения отложенной загрузки, которая включена по умолчанию, в about: config предусмотрен параметр network.http.tailing.enabled.

В большинстве случаев предложенный метод позволяет визуально ускорить появление страницы, так как счётчики и код для отслеживания не мешает загрузке основных частей, но также наблюдаются и аномалии. Например, страницы, использующие Page-Hiding Snippet от Google, стали показываться с задержкой, оставаясь пустыми в течение нескольких секунд, так как в них применяется скрытие («opacity: 0») контента до окончания загрузки всех элементов страницы. Если на подобных страницах имеются компоненты, загружаемые с сервера Google Analytics или виджеты социальных сетей, то они отображаются после существенной задержки. Другим примером являются страницы, на которых используется обращение к API виджетов (например, Twitter API), полагаясь на то, что код виджета успеет загрузиться раньше, чем будет выполнен вызов API.

©  OpenNet