【问题标题】:Wordpress the_permalink performance vs Storing the value in a variableWordpress the_permalink 性能与将值存储在变量中
【发布时间】:2013-08-09 14:15:05
【问题描述】:

创建新主题并创建包含链接到该文章的多个对象的文章视图的最有效方法是什么?我是一名 C# 专业人士,但在 PHP 方面我并不如我所愿那样精通。 假设你有:

while(have_posts())
    <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
    <a href="<?php the_permalink(); ?>"><?php the_thumbnail(); ?></a>
    <a href="<?php the_permalink(); ?>">read more</a>

如你所见,我们至少有 3 次调用函数 the_permalink();

是调用函数 3 次更快,还是调用 1 次,将其保存在一个变量中,然后根据需要在循环中尽可能多地抛出该变量?

【问题讨论】:

  • 仅供参考:the_permalink 是一个函数而不是一个类!
  • 对!功能!我的反对程序妨碍了。

标签: php wordpress performance


【解决方案1】:

虽然执行此操作会减少 CPU 负载,但这是过早优化的情况。你得到的好处并不是那么大,特别是因为这个调用不必接触数据库。一旦您考虑到 PHP 最耗时的是编译代码这一事实,如果您在基准测试中看到任何好处,我会感到惊讶。

如果您深入研究 get_permalink() 函数(在 wp-includes/link-template.php 中),您会注意到该方法仅咨询选项存储,该存储在 WP 初始化时加载一次。

如果您想加快网站速度,99% 的方法是减少数据库调用。我会把你的精力集中在那里:)

【讨论】:

  • 确实如此。对于大多数网站,完成后只需在前面放置一个好的缓存插件就值得一千次这些微小的主题优化,这些优化都会使代码变得更长并且可能很脆弱......
  • 确实如此。我会关注你的 cmets,看看我还能做些什么来尽量减少对数据库的影响。谢谢大家的投入,你们摇滚!
【解决方案2】:

我很好奇,所以我用以下代码进行了测试:

ob_start();
$bench = microtime(true);
for ($i = 0; $i < 1000; ++$i) {
    the_permalink();
    the_permalink();
    the_permalink();
}
$bench2 = microtime(true);
ob_end_clean();
echo ($bench2 - $bench) . '<br>';
ob_start();
$bench = microtime(true);
for ($i = 0; $i < 1000; ++$i) {
    $permalink = get_permalink();
    echo $permalink;
    echo $permalink;
    echo $permalink;
}
$bench2 = microtime(true);
ob_end_clean();
echo ($bench2 - $bench) . '<br>';

得到以下结果:

the_permalink(): 1.891793012619
Storing in a variable and echoing: 0.62593913078308

因此,如果有大量调用,存储在一个变量中并回显会大大加快,但对于三个调用,性能改进只会略多于千分之一秒。

请注意,每次调用 the_permalink() 时也会调用一些过滤器(例如 the_permalink、post_link 等),因此存储在变量中的速度增益可能会更高,具体取决于这些过滤器中有多少钩子以及什么他们会的。

【讨论】:

  • 实际上,首页上的文章是 3 次调用次数(通常约为 20 篇左右)所以我可以看到调用 var 而不是仅使用函数的好处。
【解决方案3】:

将其存储在变量中肯定比在您的示例中连续调用 3 次要少得多。由于 the_permalink() 会回显永久链接,因此您必须使用 get_permalink() 将其存储在变量中。

<?php
while(have_posts()) {
    $permalink = get_permalink();
?>
<h4><a href="<?php echo $permalink; ?>"><?php the_title(); ?></a></h4>
<a href="<?php echo $permalink; ?>"><?php the_thumbnail(); ?></a>
<a href="<?php echo $permalink; ?>">read more</a>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-31
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2013-08-02
    相关资源
    最近更新 更多