AdGuard 4.5.8 для iOS: фильтры обновляются в 30 раз быстрее
Немного хороших новостей в конце года. Обновление 4.5.8 — это просто классная штука, которая делает приложение в 30 раз быстрее. Да, вы не ослышались: мы немного поработали над Safari Converter, и теперь правила фильтрации AdGuard преобразуются в правила Safari всего за 0,5–2 секунды вместо 10–30. Разница особенно заметна при обновлении, включении или отключении фильтров и включении защиты.
Работая над этим, мы обнаружили проблему на стороне Apple и сообщили о ней — если её исправят, процесс станет ещё быстрее.
Теперь давайте посмотрим, как всё это работает, чтобы понять, что именно мы улучшили.
Как работают обновления фильтров
1. Загружаются новые версии фильтров
Всё начинается с загрузки новых версий фильтров в приложение AdGuard. Эта часть не вызывает никаких проблем.
2. Правила конвертируются
Далее правила из фильтров AdGuard преобразуются в правила Safari. Здесь мы применили все наши знания по оптимизации Safari Converter и смогли ускорить этот процесс в 30 раз.
Вот как выглядит разница.
До:
После:
3. Правила загружаются в Safari
В последней части всё не так хорошо, потому что там нам мешает проблема на стороне Apple.
Чтобы Safari мог применять правила фильтрации, они должны быть скомпилированы в DFA, и это работа фонового процесса под названием com.apple.Safari.ContentBlockerLoader
. AdGuard загружает новые правила для Safari, вызывает функцию reloadContentBlocker и просто ждёт результата. Пока это происходит, пользователи видят в приложении статус Блокировщики контента обновляются....
Проблема в том, что по какой-то причине производительность загрузчика искусственно ограничена на iOS и iPadOS до такой степени, что компиляция довольно небольшого блокировщика контента (28 тысяч правил) может занимать до 6–15 секунд (на macOS она завершается за доли секунды). Для больших блокировщиков контента процесс может занять более 30 секунд.
Конечно, это не очень хорошо для UX. Но важнее то, что это негативно сказывается на частоте и скорости обновления фильтров, что очень важно для своевременного исправления ошибок и работы блокировщиков рекламы.
Мы сообщили об этой проблеме в Apple. ID тикета: FB16130983. Очень надеемся, что Apple исправит проблему в 2025 году.
На этом всё. Не забудьте обновить приложение, чтобы оценить изменения, и поделиться впечатлениями в наших социальных сетях или в разделе Issues на GitHub.
Хороших вам праздников — оставайтесь в безопасности онлайн и оффлайн 💚