当我们可以简单地使用Add_Filter时,使用Add_action有什么价值呢?

时间:2012-04-12 作者:Gagan

我刚刚查看了wordpress代码,发现add\\u操作的定义如下:

function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
    return add_filter($tag, $function_to_add, $priority, $accepted_args);
}
现在,我们为什么要浪费一个CPU周期来调用另一个我们可以自己完成的函数,这样我们就不必为同一件事记住两个不同的函数名了。

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

行动会起作用。过滤器可以修改内容。你在一个动作中做一些事情,而如果你应用了一个过滤器,除了修改你正在过滤的值之外,你不希望发生任何事件或动作。e、 g.发送电子邮件或在过滤器中保存DB值是不合适的,但在操作中是可以的。可能很少有时候你需要违反这个惯例,但这是一个有用且必要的惯例。

全部替换add_actiondo_action 调用其过滤器对应项时,您可以删除区别并强制了解以下名称\'the_content\' etc是一种行为或过滤器,它从世界中过滤出来,进入你的记忆,鼓励你犯错误。

因此,与其让代码更难阅读,不如认识到,如果代码速度慢,那不是因为你没有到处刮一两条指令,要么是你的服务器速度慢,要么是你的代码算法结构和所处理数据的性质。通过重构流程、升级硬件或改变范例,你会得到更多。从总体上看,一个速度慢的网站最有可能是速度慢的,因为它的查询太多或写得不好,例如,依赖meta的post查询,或者__not_in 类型查询

要将其置于透视图中,当WordPress运行时,PHP会执行millions 的指示。将操作替换为过滤器几乎不会影响前千分之一的百分位数。

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

我尝试了新的Wordpress安装。脚本在我的笔记本电脑上出现“总线错误”之前停止,但是the number of opcodes was already at more than 2.3 millions. 说得够多了。

如果你真的想尝试,看看那个家伙是如何使用VLD的,然后自己测试一下你的理论。

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴