跳转到内容

维基教科书:编辑过滤器/说明

来自维基教科书,开放世界中的开放书籍

创建过滤器

本节解释如何创建过滤器并进行一些初步测试,这样您就不会淹没 历史页面

  • 阅读 mw:Extension:AbuseFilter/RulesFormat 的文档
  • 调试工具 中测试一些表达式
    例如,评估 'some string' rlike 'myregexp' 来测试您的正则表达式;
    true 表达式评估为1,false 不显示任何内容
  • 批量测试 页面手动测试您的代码
    找到最近进行了您要针对的编辑的人,
    将该用户名放在“用户更改”字段中,然后单击“测试”按钮;
    如果您没有看到正向触发器
    选中“显示与过滤器不匹配的更改”,然后再次单击“测试”
    找到您要针对的编辑,然后单击“(详细信息)”
    检查变量,然后可能返回到 调试工具
  • 创建 空闲(仅记录)过滤器
    在备注字段中添加类似“测试阶段,将添加警告”的内容
    让空闲过滤器运行一段时间以测试误报和漏报
  • 维基教科书讨论:编辑过滤器 上发布一条消息,以便其他管理员有机会修复您的代码或改进警告
  • 最后,完全启用您的过滤器,例如添加警告、阻止、标记等

控制效率

因为这些过滤器在每次编辑时都会运行,所以措辞不当的过滤器极有可能严重降低编辑速度,甚至导致一些较大的页面超时。但是,对条件排序方式进行一些非常小的更改,可以大大减少过滤器的运行时间。以这种方式利用操作顺序,可以使过滤器变得良好,而不会因性能原因而必须禁用。

操作顺序

操作通常从左到右执行,但它们解析的顺序有所不同。一旦过滤器未能满足其中一个条件,它将停止检查其余条件(由于 短路评估)并继续执行下一个过滤器。评估顺序是

  1. 任何用括号括起来的内容 (()) 被评估为一个单元。
  2. 将变量/文字转换为它们各自的数据。(即,article_namespace到 0)
  3. 函数调用(norm, lcase等)
  4. 一元 + 和 - (即-1234, +1234)
  5. 关键字
  6. 布尔反转(!x)
  7. 指数运算(2**3 → 8)
  8. 乘法相关(乘法、除法、模数)
  9. 比较。(<, >, ==)
  10. 布尔运算。(&, |, ^, in)

使昂贵的操作更便宜

当使用关键字时,例如rlike, in,或contains,过滤器必须遍历整个字符串变量才能查找您要搜索的字符串。变量如old_wikitext往往非常大。有时,您可以使用更小的变量来近似这些变量,例如added_linesremoved_lines,过滤器可以更快地处理这些变量。此外,使用对old_size的检查也可以帮助确保您不会尝试检查一大块维基文本。

您应该始终对过滤器进行排序,以便会剔除最多编辑的条件排在最前面。通常,这是用户组或用户编辑次数检查;通常,最后一个条件应该是实际查找您要针对的破坏行为的正则表达式。

华夏公益教科书