問題描述

我剛剛看了一下 wordpress 代碼,發現了 add_action 的這個定義:

function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
    return add_filter($tag, $function_to_add, $priority, $accepted_args);
}

現在為什麼我們浪費一個 CPU 週期來調用另一個函數,我們可以簡單地做自己,然後我們不必為同一個事情記住兩個不同的函數名。

最佳解決方案

行動做事情過濾器修改事物。您在操作中執行操作,而如果應用過濾器,則不會發生任何事件或操作,除了要過濾的值的更改。例如發送電子郵件或將數據庫值保存在過濾器中是不正確的,但在操作中可以使用。當您需要違反此慣例時,可能會有罕見的時刻,但這是一個有用和必要的規則。

通過用過濾器替換所有 add_action 和 do_action 調用,您可以刪除這些區別,並強制將諸如’the_content’ 等的操作或過濾器的知識等同於世界各地的操作或過濾器,並鼓勵錯誤。

所以不是讓你的代碼更難閲讀,而是意識到,如果你的代碼很慢,那並不是因為你沒有在這裏和那裏刮鬍子,要麼是緩慢的服務器,要麼是代碼的算法結構,正在處理的數據的性質。您將獲得更多的重構過程,升級硬件或更改您的範例。

從 WordPress 運行的角度來説,PHP 執行數百萬條指令。交換過濾器的操作幾乎不會陷入百分位數的千分之一。

http://fabien.potencier.org/article/8/print-vs-echo-which-one-is-faster

I have tried on a fresh WordPress installation. The script halts before it ends with a “Bus Error” on my laptop, but the number of opcodes was already at more than 2.3 millions. Enough said.

如果你真的想嘗試一下,看看這個人如何使用 VLD,併為自己測試你的理論。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。