这可能是一个愚蠢的问题,但作为PHP的新手,我想知道在HTML模板代码中频繁打开和关闭PHP标记是否存在任何与性能相关的问题,如果有,在使用PHP标记方面有哪些最佳实践?
我的问题不是关于结束标记的重要性/正确性,也不是关于哪种类型的代码比另一种更具可读性,而是关于文档是如何被解析/执行的,以及它可能对性能产生什么影响。
为了进行说明,请考虑以下两个极端:
混合使用PHP和HTML标签的:
<?php echo
'<tr>
<td>'.$variable1.'</td>
<td>'.$variable2.'</td>
<td>'.$variable3.'</td>
<td>'.$variable4.'</td>
<td>'.$variable5.'</td>
</tr>'
?>
// PHP tag opened once
分隔PHP和HTML标记的:
<tr>
<td><?php echo $variable1 ?></td>
<td><?php echo $variable2 ?></td>
<td><?php echo $variable3 ?></td>
<td><?php echo $variable4 ?></td>
<td><?php echo $variable5 ?></td>
</tr>
// PHP tag opened five times
会有兴趣听到一些关于这方面的观点,即使只是听到这没有什么不同。
谢谢。
发布于 2010-03-13 13:47:00
3条简单的规则让你做对了:
的根源
性能问题是很难理解的。建议新手不要考虑到这一点。因为他们总是对琐碎的事情印象深刻,却看不到真正重要的事情。只是因为缺乏经验。
你的问题也一样。想象一下,你会得到一些不同。即使是大的方法,比方说,一个方法也快2倍。哦,天哪,两次!我选择了它,并很好地优化了我的应用程序,现在它的运行速度将提高50%!
错误。不是50%。你永远不会注意到,甚至不会测量到这种速度的提高。因为你优化了一个只占整个脚本运行时间0,0001%的部分。
对于大型的超文本标记语言表格,浏览器需要很长时间才能呈现它。比你生成的要多得多。
性能分析是性能世界中的一个关键词。如果没有“性能分析”这个词,人们可以毫不犹豫地丢弃任何与性能相关的问题。同时,剖析也不是一门火箭科学。它只是对脚本不同部分的运行时间进行测量。可以使用一些分析器,比如xdebug,甚至可以使用microtime(1)
手动完成。只有在检测到最慢的部分后,才可以开始测试。
在提出性能问题之前,请先学习分析。并学会在没有真正原因的情况下不要询问性能问题。
过早的优化是所有邪恶的根源- D.Knuth。
发布于 2010-04-27 00:38:47
我重做了包含50,000行的测试,并添加了多个回声在1个标签中的方法
for ($j=0;$j<30;$j++) {
foreach ($results as $key=>$val){
?>
<tr>
<td><?php echo $results[$key][0]?></td>
<td><?php echo $results[$key][1]?></td>
<td><?php echo $results[$key][2]?></td>
<td><?php echo $results[$key][3]?></td>
<td><?php echo $results[$key][4]?></td>
<td><?php echo $results[$key][5]?></td>
<td><?php echo $results[$key][6]?></td>
<td><?php echo $results[$key][7]?></td>
<td><?php echo $results[$key][8]?></td>
<td><?php echo $results[$key][9]?></td>
<td><?php echo $results[$key][10]?></td>
<td><?php echo $results[$key][11]?></td>
<td><?php echo $results[$key][12]?></td>
<td><?php echo $results[$key][13]?></td>
<td><?php echo $results[$key][14]?></td>
</tr>
<?php
}
}
duration1: 31.15542483秒
for ($k=0;$k<30;$k++) {
foreach ($results as $key1=>$val1){
echo
'<tr>
<td>'.$results[$key1][0].'</td>
<td>'.$results[$key1][1].'</td>
<td>'.$results[$key1][2].'</td>
<td>'.$results[$key1][3].'</td>
<td>'.$results[$key1][4].'</td>
<td>'.$results[$key1][5].'</td>
<td>'.$results[$key1][6].'</td>
<td>'.$results[$key1][7].'</td>
<td>'.$results[$key1][8].'</td>
<td>'.$results[$key1][9].'</td>
<td>'.$results[$key1][10].'</td>
<td>'.$results[$key1][11].'</td>
<td>'.$results[$key1][12].'</td>
<td>'.$results[$key1][13].'</td>
<td>'.$results[$key1][14].'</td>
</tr>';
}
}
duration2: 30.23169804秒
for ($l=0;$l<30;$l++) {
foreach ($results as $key2=>$val2){
echo'<tr>';
echo'<td>'.$results[$key2][0].'</td>';
echo'<td>'.$results[$key2][1].'</td>';
echo'<td>'.$results[$key2][2].'</td>';
echo'<td>'.$results[$key2][3].'</td>';
echo'<td>'.$results[$key2][4].'</td>';
echo'<td>'.$results[$key2][5].'</td>';
echo'<td>'.$results[$key2][6].'</td>';
echo'<td>'.$results[$key2][7].'</td>';
echo'<td>'.$results[$key2][8].'</td>';
echo'<td>'.$results[$key2][9].'</td>';
echo'<td>'.$results[$key2][10].'</td>';
echo'<td>'.$results[$key2][11].'</td>';
echo'<td>'.$results[$key2][12].'</td>';
echo'<td>'.$results[$key2][13].'</td>';
echo'<td>'.$results[$key2][14].'</td>';
echo'</tr>';
}
}
duration3: 27.54640007秒
最初的两种方法没有太大区别,但看起来速度要快得多,而且连接@poke的次数更少
因为我怀疑一下子就需要这么多数据,所以我想我会继续使用很多标签,代码缩进看起来更整洁,“查看源代码”布局也更准确
发布于 2010-03-13 11:40:40
您可以很容易地忽略这两者之间的性能差异。在当今的现代计算资源中,差异真的无关紧要。这种打印到屏幕的东西真的不用担心。在此之前,你还应该考虑很多其他的东西。除此之外,代码的最佳性能和可维护性之间始终存在争论。您不能总是尝试实现最佳性能。相反,您应该始终考虑性能问题以及需要花费在改进它们上的时间。
https://stackoverflow.com/questions/2437144
复制相似问题