跳轉到內容

華夏公益教科書:編輯過濾器/說明

來自華夏公益教科書

建立過濾器

本節解釋如何建立過濾器並進行一些初步測試,這樣您就不會淹沒 歷史頁面

  • 閱讀 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的檢查也可以幫助確保您不會嘗試檢查一大塊維基文字。

您應該始終對過濾器進行排序,以便會剔除最多編輯的條件排在最前面。通常,這是使用者組或使用者編輯次數檢查;通常,最後一個條件應該是實際查詢您要針對的破壞行為的正則表示式。

華夏公益教科書