2

什么是创建新主题并创建包含链接到所述文章的多个对象的文章视图的最有效方法?我是一名 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 次更快,还是调用一次,将其保存在一个变量中,然后根据需要将变量扔到循环中会更快吗?

4

3 回答 3

5

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

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

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

于 2013-08-09T14:35:56.053 回答
3

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

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 等),因此存储在变量中的速度增益可能会更高,具体取决于这些过滤器中有多少挂钩以及它们的作用。

于 2013-08-09T14:50:52.850 回答
2

将其存储在变量中肯定比在您的示例中连续调用 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>
于 2013-08-09T14:27:55.123 回答