硬编码和WordPress性能

时间:2013-02-28 作者:Adam Capriola

WordPress Optimization/Performance page 它建议对静态变量进行硬编码,而不是通过WordPress函数引用它们。我想我明白了这背后的道理。

但是做如下事情怎么样:

function foobar() {

    global $post;

    $post_ID = $post->ID;

    $site_url = site_url();

    // Use $post_ID and $site_url multiple times throughout the function

}
这比显式调用性能更好吗$post->IDsite_url() 每次你都想引用它们?还是说这没什么区别?

3 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

这是一个PHP问题,与WP没有任何关系,但因为它被升级了。。。。

TL;Dr版本-编译器在这种微优化方面比您做得好得多,甚至尝试都没有意义。

让我们看看编译器将如何处理您的问题代码

// is this less efficient
$meta = get_post_meta($post->ID,\'meta\');
$permalink = get_permalink($post->ID);

//then this?

$post_ID = $post->ID; 
$meta = get_post_meta($post_ID,\'meta\');
$permalink = get_permalink($post_ID);
在第一节中,编译器可以看到您使用$post->ID 两次,无需对$post 对象,它将只计算一次该值,并在两个调用中使用它。

第二部分基本上是编译器自己完成的,但由于它有更多的文本,因此解析速度较慢,因此总执行时间较长

但是呢

 foo1(site_url());
 foo2();
 foo3(site_url());

 // vs

 $site_url = site_url();
 foo1($site_url);
 foo2();
 foo3($site_url);
在这里,编译器不能假定site_url() 在每次使用中都是相同的,因此无法进行优化,第二个版本可能会更快。

但是如果在接下来的过程中,您决定不需要对foo3进行调用,并且删除了该行,该怎么办?我们再次回到这样一种情况,即您编写的代码与编译器本身所做的完全相同,但会使解析速度变慢

你真的能确定foo2()不会被更改,从而修改site_url()? 使用优化的代码,它将创建一个bug。

这些都是不成熟的/早期的优化,您应该避免这样做,因为它们通常对站点的性能影响很小。

相关法典中的建议为BS。我不会讨论核心本身是如何优化wordpress中选项的使用的,因此这篇文章声称

$a = 5;
快于

$a = foo();

function foo() {
  return 5;
}
这是真的,但这种差异通常不值得永远失去通过插件操纵这些值的能力,以及从管理员那里管理这些值的能力。

SO网友:Milo

您链接到的页面建议使用硬编码值,否则可能导致数据库查询。与站点url类似,它是一个自动加载和缓存的选项,额外的调用不会导致额外的数据库查询。我要说的是,你给出的两个例子都会产生接近于零的差异,甚至不值得担心。

SO网友:Vinod Dalvi

cpu和;内存优化。如果您将值存储在变量中,而不是调用函数并在运行时获取值,那么肯定会优化cpu性能,但会消耗更多的系统内存。

结束

相关推荐

Performance on WPMS

我的WPMS站点托管在8核/32mb RAM服务器上,但响应时间非常长。我们有大约1000个博客(单个db上有35000多个表)和70000个页面浏览量。我认为我可以缩短响应时间,将具有更多页面浏览量的博客移动到单独的DB中,并使用hyper DB插件将所有博客拆分为每个DB 100个博客。你觉得怎么样?