Работа любого блокировщика построена на использовании разных списков фильтрации или, проще говоря, фильтров. Это в буквальном смысле списки правил, написанные особым синтаксисом.
И если бы нам нужно было описать принцип работы блокировщиков в трёх словах, мы бы сказали "интерпретирование правил фильтрации".
Блокировщики понимают весь этот сложный синтаксис и выполняют действия, которые им предписывают правила в отношении входящего трафика: блокируют те или иные элементы, определённым образом меняют веб-страницы и т.д.
Таких фильтров существует великое множество. Тысячи волонтёров работают над тем, чтобы блокировщики максимально качественно блокировали рекламу и не ломали при этом функционал сайтов.
Вы возможно слышали о предстоящих изменениях в браузере Chrome, также известных как Manifest v3. У нас есть опасения, что эти изменения могут фактически уничтожить экосистему фильтров. На самом деле, эта статья адресована в первую очередь именно разработчикам Google Chrome. Мы верим, что текущие проблемы в реализации появились не из-за их желания навредить экосистеме, а просто от непонимания, как она устроена. Поэтому мы решили, что нам необходимо подробно описать, как сейчас построен процесс, и что не так с Manifest v3.
И, возможно, остальным читателям тоже будет интересно узнать, как это работает.
Как мы упомянули выше, блокировщики, по сути, интерпретируют различные правила фильтрации. Сначала блокировщик скачивает фильтры: это могут быть любые фильтры, скачанные из разных мест. А дальше блокировщик начнёт сверять контент страниц со всеми имеющимися правилами фильтрации.
Так работает блокировка
Давайте немного углубимся в технические аспекты, наверняка некоторым из вас было бы интересно узнать, как всё работает на более глубоком уровне. Итак, есть несколько видов фильтрации:
Реклама на веб-страницах не появляется волшебным образом из ничего. Её нужно как-то подгрузить с сервера. Для этого браузер должен отправить веб-запрос. Правила фильтрации же сообщают блокировщикам, какие запросы пытаются "вытащить" рекламу, а не полезный контент, и, следовательно, должны быть заблокированы.
Каждая веб-страница имеет DOM ("document object model" — объектную модель документа), по сути документ HTML, который содержит структуру страницы и все её элементы. Рекламные баннеры на странице также являются элементами и отображаются в DOM. Блокировщики рекламы могут удалять части DOM, а правила фильтрации помогают им понять, какие части являются рекламными и должны быть удалены, а какие трогать не стоит.
Конечно, на самом деле всё гораздо сложнее, но так проще понять общую картину. Если вы хотите узнать больше именно о технической стороне, посмотрите наше руководство по синтаксису правил фильтрации.
Существуют сотни, если не тысячи фильтров: фильтры AdGuard, EasyList и другие. Чтобы они всегда были актуальны и ничего не ломали на сайтах, специалисты и энтузиасты ежедневно трудятся над их обновлениями.
Фильтры не просто блокируют рекламу, и разные люди выбирают разные комбинации фильтров в соответствии со своими предпочтениями. Вот несколько примеров популярных списков фильтрации, которые иллюстрируют, насколько все они могут отличаться:
Если интересно, вот здесь вы можете найти огромную базу списков фильтрации.
И вот мы подошли к первой проблеме: в текущей реализации Google Chrome подразумевает, что будет постоянно включён один-единственный предустановленный фильтр (так называемые "статические" правила). Его можно будет изменить, используя т.н. "динамические" правила, но ограничение на их количество преступно маленькое: всего 5 000. Многие фильтры, приведённые выше, просто не влезают в это ограничение. Что уж говорить о случае, когда вы хотите включить сразу несколько.
Как мы уже говорили, фильтры должны постоянно обновляться. Для этого есть две основные причины:
Конечно, разработчики фильтров не могут сами следить за миллионами сайтов. Их работа сильно зависит от отклика пользователей. Просто представьте:
У многих блокировщиков рекламы есть инструменты, которые помогают пользователям легко сообщать о любых проблемах с фильтрами, с которыми они сталкиваются. Например, пользователи AdGuard имеют доступ к специальному веб-инструменту для отчётов. На основании таких жалоб разработчики корректируют свои списки фильтров. Блокировщики рекламы обновляют фильтры — вжух! — и реклама исчезает.
Фильтры постоянно обновляются
Что приводит нас к следующей проблеме: Динамические правила в Chrome будут отличаться по приоритету от статических, что может вносить путаницу и мешать разработчикам фильтров.
Краеугольным камнем блокировки рекламы является возможность добавления пользователями любых фильтров по URL (а не выбирая из заранее предоставленного списка, каким бы большим он ни был). Это очень важный момент для развития экосистемы фильтров по нескольким причинам.
И снова возвращаемся к той же проблеме: Текущий лимит на количество динамических правил слишком мал для этой цели. Это медленно, но верно приведёт к кризису в сообществе разработки фильтров.
Если ничего не предпринять и все запланированные изменения Google Chrome будут претворены в реальность, нас всех ждут крайне неприятные последствия:
Мы в своё время много и жёстко высказывались о блокировке контента в Safari, и заслуженно. Но там хотя бы путём всевозможных "костылей" и прочих хитростей мы смогли сгладить эту ситуацию и прийти к удовлетворительному решению. В случае же с вариантом, предлагаемым Google, мы вообще не видим выхода из ситуации.
На самом деле, все эти проблемы можно решить, причём не слишком отклоняясь от общего направления, которое Google задал для Chrome. Что для этого требуется по нашему мнению:
Честно говоря, нам, как разработчикам, было бы гораздо удобнее работать исключительно с динамическими правилами. Разделение на статические и динамические лишь создаёт проблемы и вносит ненужную путаницу.
Но в то же время, мы готовы к диалогу с разработчиками Google Chrome, чтобы найти компромисс, который удовлетворит всех, и прежде всего — пользователей Chrome.
PS:
Если вы считаете, что быть разработчиком фильтров — это ваше, то мы всегда рады любой помощи! Заглянув на эту страницу, вы узнаете, как можно помочь нам в разработке фильтров AdGuard, и что можно получить взамен за свои усилия