правила ведь не работают последовательно
К набору правил одного фильтра не совсем подходят слова "последовательно" или "непоследовательно". Может получиться так, что они сработают последовательно , а может - нет.
Общее направление понятно. Спасибо!
Но, всё таки, поведение CM изменилось или нет? Т.е. сейчас происходит ли формирование суперправила или может быть, что более верятно, их формируется несколько?
Ранее, начиная с версии 1.XX, при компиляции он формировал из набора правил одно супер-правило, затем применял к тексту в один проход и потом уже сверял указанные в правилах URL - это на сегодня действительно или есть какие-то изменения в алгоритмах?
Любопытство не праздное, т.к. у меня тут, на всякий случай (а вдруг забудется что-нибудь?), есть записи Ваших рекомендаций и чтобы они были актуальными при составлении фильтров, требуется их корректировка, если были какие-то изменения. В общем, требуется уточнение, то ли я ранее понял что-то не совсем верно, то ли изменения в логике работы произошли...
Вот эта рекомендация:
1. Последовательное применение правил катастрофически неэффективно.
Пусть у СМ есть три правила для поиска текста:
Find: "<a>", URL: "site1.com"
Find: "<a\s++class='advert'>"
Find: "find"
Как действовать СМ для поиска этих строк на сайте? Есть несколько вариантов:
Можно применить ко всему тексту правило 1. Если что-то найдено, произвести необходимые действия. Затем применить правило 2 и т.д. Так работал СМ 0.хх, и с точки зрения быстродействия это никуда не годится. Применение каждого из них во-первых, заставляет заново посимвольно сканировать один и тот же текст, и во-вторых, забирает ресурсы на инициализацию вспомогательных структур памяти и их последующее освобождение
С версии 1.хх СМ применяет к тексту единственное постоянное мега-правило "<a(?:>|\s++class='advert'>)|find". Текст анализируется в один проход и без дополнительных затрат на запуск PCRE для каждого правила.
была дана относительно другой ситуации с правилами, но теперь не совсем понимаю как же, всё таки, работает компиляция правил, т.е. требуется уточнение алгоритма, для того, чтобы можно было учитывать, при создании правил, все факторы влияющие на работу CM с ними.