単純にadd_filterを使用できるときにadd_actionを使用する価値はありますか?


10

ワードプレスのコードを調べたところ、add_actionの次の定義が見つかりました。

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

なぜ私たちは自分自身で実行できる別の関数を呼び出すために1つのCPUサイクルを浪費しているのか、そして同じものに対して2つの異なる関数名を覚える必要がないのです。


これが、add_actionとadd_filterの戻り値が異なる理由ですか?wordpress.stackexchange.com/questions/283564/...
mahatmanich

回答:


9

アクションは物事を行います。フィルターは物事を変更します。アクションで何かを行いますが、フィルターを適用する場合、フィルターしている値の変更以外は、イベントやアクションが発生することはありません。たとえば、電子メールを送信したり、フィルターにDB値を保存したりすることはできませんが、アクションでは問題ありません。この規約に違反する必要がある稀な瞬間があるかもしれませんが、それは便利で必要なものです。

all add_actiondo_actioncallを対応するフィルターに置き換えることで、区別を取り除き、'the_content'アクションやフィルターなどの名前が世界から外に出て、あなたの記憶に侵入し、間違いを助長します。

したがって、コードを読みにくくする代わりに、コードが遅い場合でも、あちこちで1つまたは2つの命令を剃っていなかったのではなく、遅いサーバーであるか、コードのアルゴリズム構造であることに注意してください。処理されるデータの性質。プロセスのリファクタリング、ハードウェアのアップグレード、またはパラダイムの変更からはるかに多くを得るでしょう。物事の壮大な計画では、遅いサイトは、多くの場合、または不適切に記述されたクエリを持っているため、遅い可能性が高い__not_inです。

見通しを立てると、WordPressが実行されると、PHPは何百万もの命令を実行します。フィルターのスワッピングアクションでは、百分位数の上位1000分の1にほとんど凹みがありません。

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

Wordpressの新規インストールを試しました。私のラップトップでスクリプトが「バスエラー」で終了する前に停止しましたが、オペコードの数はすでに230万を超えていました。十分に言った。

本当に試したい場合は、その男がVLDをどのように使用したかを調べ、自分の理論を自分でテストしてください。


つまり、2つの異なる名前を持つ人に電話をかけるのと類似しているものを除いて、実際には違いはないということです...自宅で彼と呼ぶ人と、オフィスで彼と呼ぶ人:)
Gagan

アクション関数によるフィルターのラッピングは、おそらく4または5のオペコードのペナルティを招きます。これは物事の規模では些細なことですが、大きな配列で三項演算子(?:)を使用することで、どんな利点も簡単に一掃できます(ブログ投稿を参照)私がリンクしているブログでは、彼のブログは一見の価値があります)。TLDRは違いがあるが、それはとても小さなことの無意味だ
トム・J Nowell

これを解決してくれたバディに感謝します。多くの人々が同じコードで作業しているという事実を考慮したことがなく、誰かがアクションの代わりにフィルターのdo_action()を書き続けると、それはより大きな問題になります。そのため、コードが使用されるまで自分だけがコードを通過することが確実な場合は、add_filtersを使用します。それ以外の場合は、add_action()を記述します:)
Gagan

また、週末に投稿で言及した方法をテストし、結果を投稿します。
Gagan

1
常に慣習を守ることをお勧めします。apply_filtersを常に使用すると、マイクロ最適化になります。あなたはパフォーマンスのペナルティを獲得しますが、PHPのオペコードからではなく、それはより悪い、精神的なパフォーマンスのペナルティです。カスタムアクション/フィルターを作成し、後で再訪問する場合も誤解を招きます。それはアクションですか、フィルターですか?知る方法がない
トムJノーウェル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.