制作新主题并创建包含链接到所述文章的多个对象的文章视图的最有效方法是什么?我是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();
调用函数三次更快,或者更确切地说它是一次,将它保存在一个变量中,然后根据需要将变量放入循环中?
答案 0 :(得分:5)
虽然执行此操作的CPU负载较少,但这是一个过早优化的情况。您获得的好处并不是那么好,特别是因为此调用不必触及数据库。一旦你考虑到使用PHP花费最长时间的事实就是编译代码,如果你在基准测试中看到任何好处,我会感到惊讶。
如果你深入了解get_permalink()函数(在wp-includes / link-template.php中),你会注意到该方法只参考了在WP初始化时加载一次的选项存储。
如果您正在尝试加速网站,99%的方法是减少数据库调用。我会集中精力在那里:)
答案 1 :(得分: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
因此,如果存在大量调用,则存储在变量和回显中的速度要快得多,但对于三次调用,性能提升只会超过千分之一秒。
请注意,每次调用_permalink()时都会调用一些过滤器(例如the_permalink,post_link等),因此存储在变量中的速度增益可能会更高,具体取决于这些过滤器中有多少个钩子以及他们这样做。
答案 2 :(得分: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>