Описание функции:
Создаётся 1 общий список правил из всех списков правил во временном файле или оперативе. При запросе веб страницы она фильтруется с помощью данного общего списка правил, при чём сработавшие правила копируются в кэш-список для данной веб страницы, а не сработавшие пропускаются, во время анализа по списку правил должен идти курсор, который не должен возвращаться в начало даже при обновлении данной страницы. Для каждой новой открытой страницы создаётся свой курсор в полном списке правил для выборки сработавших правил и их записи в кэш-список соответствующей веб страницы. После обновления страницы нужно повторно применить сработавшие правила, а затем последовательно применять ещё не обработанные правила, пока курсор в конечном счёте не достигнет конца общего списка правил, после чего можно установить флаг завершения фильтрации страницы и завершить формирование кэша правил для текущей страницы. Даже если время загрузки страницы будет ограничено скриптом, как на mail.yandex.ru, то после 1-3 обновлений страницы AdGuard всё равно сможет применить все имеющиеся там правила фильтрации, даже если их будет миллион, поскольку анализ правил и обработка веб страницы не будет начинаться заново при каждом её обновлении в течении очень короткого времени.
Браузеры умеют обновлять страницы с очисткой кэша и без, поэтому если список фильтров для отдельного сайта будет обновлён, а в кэше фильтров будут старые данные, то AdGuard можно научить смотреть за датой создания файлов кэша браузера, если она новее даты создания кэша фильтров страницы - формировать кэш правил для веб страницы заново. Это позволит автоматически применять обновления фильтров в кэше без их полной очистки в результате обновлений списков фильтрации, тем более неизвестно есть ли новые правила для проанализированных ранее веб страниц и имеет ли это смысл. Если этого не сделать - возможен пропуск рекламы, о чём нужно будет предупредить пользователя и как дополнение и альтернативу сделать кнопку/пункт для принудительного обновления приватного списка правил для текущей страницы и последующую перезагрузку страницы с новым списком правил.
Время хранения кэша правил для отдельно взятой страницы можно ограничить парой минут или хранить последние 100-500, то есть если в логе кеширования имеется 100% совпадающий адрес - перемещать его вверх списка вместе с набором правил, если он был создан не более 12 часов назад, иначе пересоздавать кэшированный список правил для данной страницы заново. Совпадающие списки фильтров для разных страниц одного сайта можно объединять, то есть применять полученный кэш правил к множеству уже обработанных ранее страниц. Если приватный кеш правил страниц будет иметь такую же продолжительность жизни как период проверки обновлений правил, то это решит некоторые проблемы с обновлением приватного кеша правил фильтрации страниц вовремя, но это так же не эффективно для подавляющего большинства случаев, поскольку правила фильтрации для отдельных сайтов всё-таки обновляются сравнительно редко, за некоторым исключением.
Для ускорения фильтрации можно различать полные адреса страниц по маске, обычно страницы с однотипной структурой на сайтах имеют одинаковое начало адреса вплоть до последнего слеша, поэтому кэшированный набор правил скорее всего будет подходить для всех сходных адресов в большинстве случаев. Для надёжности применять кэшированный фильтр правил по маске адреса можно только после нескольких последовательных анализов таких веб страниц, если во всех случаях конечный список сработавших правил совпадёт - списки можно объединить под одним общим адресом набора страниц ( например, http://example.com/section/*.html или http://example.com/*/*/*/* ), данную операцию можно производить уже после окончания фильтрации текущей веб страницы.
В помощнике/плагине можно добавить функцию для досрочной очистки кэша правил фильтрации для текущей веб страницы и/или всего текущего сайта, открытого на активной вкладке. Быстрое включение/отключение, возможно, тоже не было бы лишним.
Для данной функции, будет уместно наличие списка сайтов-исключений или наоборот белый список. Так же данная функция будет скорее всего неприменима к динамически загружаемым страницам, где содержимое грузится постепенно по мере прокрутки страницы, полагаю такие страницы можно определить по наличию соответствующего скрипта.
Поскольку всё это потребует объёмов оперативы - лучше сделать возможность включения/отключения подобного кеширования правил в расширенных настройках.
Создаётся 1 общий список правил из всех списков правил во временном файле или оперативе. При запросе веб страницы она фильтруется с помощью данного общего списка правил, при чём сработавшие правила копируются в кэш-список для данной веб страницы, а не сработавшие пропускаются, во время анализа по списку правил должен идти курсор, который не должен возвращаться в начало даже при обновлении данной страницы. Для каждой новой открытой страницы создаётся свой курсор в полном списке правил для выборки сработавших правил и их записи в кэш-список соответствующей веб страницы. После обновления страницы нужно повторно применить сработавшие правила, а затем последовательно применять ещё не обработанные правила, пока курсор в конечном счёте не достигнет конца общего списка правил, после чего можно установить флаг завершения фильтрации страницы и завершить формирование кэша правил для текущей страницы. Даже если время загрузки страницы будет ограничено скриптом, как на mail.yandex.ru, то после 1-3 обновлений страницы AdGuard всё равно сможет применить все имеющиеся там правила фильтрации, даже если их будет миллион, поскольку анализ правил и обработка веб страницы не будет начинаться заново при каждом её обновлении в течении очень короткого времени.
Браузеры умеют обновлять страницы с очисткой кэша и без, поэтому если список фильтров для отдельного сайта будет обновлён, а в кэше фильтров будут старые данные, то AdGuard можно научить смотреть за датой создания файлов кэша браузера, если она новее даты создания кэша фильтров страницы - формировать кэш правил для веб страницы заново. Это позволит автоматически применять обновления фильтров в кэше без их полной очистки в результате обновлений списков фильтрации, тем более неизвестно есть ли новые правила для проанализированных ранее веб страниц и имеет ли это смысл. Если этого не сделать - возможен пропуск рекламы, о чём нужно будет предупредить пользователя и как дополнение и альтернативу сделать кнопку/пункт для принудительного обновления приватного списка правил для текущей страницы и последующую перезагрузку страницы с новым списком правил.
Время хранения кэша правил для отдельно взятой страницы можно ограничить парой минут или хранить последние 100-500, то есть если в логе кеширования имеется 100% совпадающий адрес - перемещать его вверх списка вместе с набором правил, если он был создан не более 12 часов назад, иначе пересоздавать кэшированный список правил для данной страницы заново. Совпадающие списки фильтров для разных страниц одного сайта можно объединять, то есть применять полученный кэш правил к множеству уже обработанных ранее страниц. Если приватный кеш правил страниц будет иметь такую же продолжительность жизни как период проверки обновлений правил, то это решит некоторые проблемы с обновлением приватного кеша правил фильтрации страниц вовремя, но это так же не эффективно для подавляющего большинства случаев, поскольку правила фильтрации для отдельных сайтов всё-таки обновляются сравнительно редко, за некоторым исключением.
Для ускорения фильтрации можно различать полные адреса страниц по маске, обычно страницы с однотипной структурой на сайтах имеют одинаковое начало адреса вплоть до последнего слеша, поэтому кэшированный набор правил скорее всего будет подходить для всех сходных адресов в большинстве случаев. Для надёжности применять кэшированный фильтр правил по маске адреса можно только после нескольких последовательных анализов таких веб страниц, если во всех случаях конечный список сработавших правил совпадёт - списки можно объединить под одним общим адресом набора страниц ( например, http://example.com/section/*.html или http://example.com/*/*/*/* ), данную операцию можно производить уже после окончания фильтрации текущей веб страницы.
В помощнике/плагине можно добавить функцию для досрочной очистки кэша правил фильтрации для текущей веб страницы и/или всего текущего сайта, открытого на активной вкладке. Быстрое включение/отключение, возможно, тоже не было бы лишним.
Для данной функции, будет уместно наличие списка сайтов-исключений или наоборот белый список. Так же данная функция будет скорее всего неприменима к динамически загружаемым страницам, где содержимое грузится постепенно по мере прокрутки страницы, полагаю такие страницы можно определить по наличию соответствующего скрипта.
Поскольку всё это потребует объёмов оперативы - лучше сделать возможность включения/отключения подобного кеширования правил в расширенных настройках.