首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >开始/结束标记和性能?

开始/结束标记和性能?
EN

Stack Overflow用户
提问于 2010-03-13 11:21:28
回答 5查看 12.2K关注 0票数 92

这可能是一个愚蠢的问题,但作为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

会有兴趣听到一些关于这方面的观点,即使只是听到这没有什么不同。

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-13 13:47:00

3条简单的规则让你做对了:

  • 语法问题不会影响性能。数据操作确实如此。只有profiling.
  • Premature优化结果支持的
  • 才是所有邪恶的

的根源

性能问题是很难理解的。建议新手不要考虑到这一点。因为他们总是对琐碎的事情印象深刻,却看不到真正重要的事情。只是因为缺乏经验。

你的问题也一样。想象一下,你会得到一些不同。即使是大的方法,比方说,一个方法也快2倍。哦,天哪,两次!我选择了它,并很好地优化了我的应用程序,现在它的运行速度将提高50%!

错误。不是50%。你永远不会注意到,甚至不会测量到这种速度的提高。因为你优化了一个只占整个脚本运行时间0,0001%的部分。

对于大型的超文本标记语言表格,浏览器需要很长时间才能呈现它。比你生成的要多得多。

性能分析是性能世界中的一个关键词。如果没有“性能分析”这个词,人们可以毫不犹豫地丢弃任何与性能相关的问题。同时,剖析也不是一门火箭科学。它只是对脚本不同部分的运行时间进行测量。可以使用一些分析器,比如xdebug,甚至可以使用microtime(1)手动完成。只有在检测到最慢的部分后,才可以开始测试。

在提出性能问题之前,请先学习分析。并学会在没有真正原因的情况下不要询问性能问题。

过早的优化是所有邪恶的根源- D.Knuth

票数 89
EN

Stack Overflow用户

发布于 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的次数更少

因为我怀疑一下子就需要这么多数据,所以我想我会继续使用很多标签,代码缩进看起来更整洁,“查看源代码”布局也更准确

票数 42
EN

Stack Overflow用户

发布于 2010-03-13 11:40:40

您可以很容易地忽略这两者之间的性能差异。在当今的现代计算资源中,差异真的无关紧要。这种打印到屏幕的东西真的不用担心。在此之前,你还应该考虑很多其他的东西。除此之外,代码的最佳性能和可维护性之间始终存在争论。您不能总是尝试实现最佳性能。相反,您应该始终考虑性能问题以及需要花费在改进它们上的时间。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2437144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档