Создание фильтра
В этом разделе объясняется, как создать фильтр с предварительным тестированием, чтобы не переполнять страницу истории .
- Прочтите документацию по адресу mw: Extension: AbuseFilter / Rules format
- Проверьте некоторые выражения в инструментах отладки :
- например, оцените,
'some string' rlike 'myregexp'
чтобы проверить свое регулярное выражение; - истинное выражение оценивается как 1 , ложное ничего не показывает
- например, оцените,
- Вручную протестируйте свой код на странице пакетного тестирования :
- найти кого-то, кто недавно внес правку, на которую вы пытаетесь настроить таргетинг,
- введите это имя пользователя в поле «Изменения пользователем» и нажмите кнопку «Проверить»;
- если вы не видите положительных триггеров:
- установите флажок «показать изменения, не соответствующие фильтру» и снова нажмите «проверить»
- найдите нужную правку и нажмите "(подробности)"
- проверьте переменные и, возможно, вернитесь к инструментам отладки
- Создать фильтр простоя (только ведение журнала)
- в поле заметок добавьте что-то вроде «Фаза тестирования, добавлю предупреждение»
- дайте холостому фильтру поработать некоторое время, чтобы проверить наличие ложных срабатываний и отрицательных результатов
- Разместите сообщение в WP: EFN , чтобы другие менеджеры фильтров редактирования могли его улучшить.
- Наконец, полностью включите свой фильтр, например, добавьте предупреждение, предотвращение, теги и т. Д.
Эффективность управления
Поскольку эти фильтры запускаются при каждом отдельном редактировании, плохо сформулированный фильтр может серьезно замедлить редактирование или даже вызвать тайм-аут некоторых больших страниц. Однако некоторые очень незначительные изменения в порядке упорядочивания условий могут значительно сократить время работы фильтров. Использование такого порядка операций может иметь значение между хорошим фильтром и фильтром, который должен быть отключен по соображениям производительности.
Порядок операций
Операции обычно выполняются слева направо, но есть порядок, в котором они выполняются. Как только фильтр не выполняет одно из условий, он прекращает проверку остальных (из -за оценки короткого замыкания ) и переходит к следующему фильтру. Порядок оценки:
- Все, что заключено в круглые скобки (
(
и)
), оценивается как единое целое. - Превращение переменных / литералов в соответствующие данные. (т.е.
article_namespace
до 0) - Вызовы функций (
norm
,lcase
и т. Д.) - Унарный
+
и-
(определяющий положительное или отрицательное значение, например-1234
,+1234
) - Ключевые слова
- Логическая инверсия (
!x
) - Возведение в степень (
2**3 → 8
) - Связанные с умножением (умножение, деление, по модулю)
- Сложение и вычитание (
3-2 → 1
) - Сравнения. (
<
,>
,==
) - Логические операции. (
&
,|
,^
,in
)
Удешевление дорогостоящих операций
При использовании таких ключевых слов, как rlike , in или contains , фильтр должен пройти через всю строковую переменную, чтобы найти строку, которую вы ищете. Такие переменные, как old_wikitext, имеют тенденцию быть очень большими. Иногда вы будете в состоянии приблизить эти переменные, используя меньшие , такие как added_lines или removed_lines , что фильтр может обрабатывать гораздо быстрее. Кроме того, использование проверки old_size также может помочь убедиться, что вы даже не собираетесь проверять большой блок викитекста.
Вы всегда должны заказывать свои фильтры так, чтобы сначала было условие, которое выбьет наибольшее количество правок. Обычно это проверка групп пользователей или количества правок пользователей; в общем, последним условием должно быть регулярное выражение, которое на самом деле ищет вид вандализма, на который вы нацеливаетесь.