打开/关闭标签和性能?

Tom*_*Tom 90 html php tags performance templates

这可能是一个愚蠢的问题,但作为一个相对较新的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
Run Code Online (Sandbox Code Playgroud)

分离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
Run Code Online (Sandbox Code Playgroud)

有兴趣听到一些关于此的观点,即使只是听到它没有任何区别.

谢谢.

You*_*nse 85

3个简单的规则,让您正确:

  • 没有语法问题会影响性能.数据操作有.
  • 演讲结果仅支持分析结果.
  • 过早优化是万恶之源

性能问题很难理解.建议新手不要将其考虑在内.因为他们总是对小事感到印象深刻而且看不到真正重要的事情.仅仅因为缺乏经验.

你的问题也一样.想象一下,你会有所不同.比如说一个方法,即使是一个方法也要快2倍.哦,我的,2次!我选择它并优化我的应用程序,现在它的运行速度提高了50%!

错了.不是50%.你永远不会注意到甚至测量这种速度增加.因为您优化了仅占整个脚本运行时的0,0001%的部件.

对于大型HTML表,浏览器需要很长时间才能呈现它.远远超过你的生成.

分析是表演世界中的关键词.如果没有"剖析"字样,人们可以毫不怀疑地删除任何与性能相关的问题.同时剖析不是火箭科学.我只是测量脚本不同部分的运行时间.可以使用某些分析器完成,例如xdebug,甚至可以手动使用microtime(1).只有在检测到最慢的部分后,您才可以从测试开始.

在询问表演问题之前学习简介.如果没有真正的理由,请学会不要提出表现问题.

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

  • 为什么这么高评价?它没有以任何形式或形式回答问题.-1来自我. (9认同)
  • 如果我使用"基准"而不是"个人资料"这个词,为什么会这么糟糕?这个意思有什么不同吗?很高兴知道差异:) (4认同)
  • @NikiC我见过的通常用法:**基准测试**意味着以某种方式测量或排列代码片段的整体*性能,以便将其与其他解决方案进行比较(就像Amien在回答这个问题时所做的那样,**分析**意味着*找出*代码的*部分*对您尝试解决的任何用户可见的性能问题负责.不同之处在于*分析*是关于确定性能问题的原因,而基准测试是关于测试它的解决方案. (2认同)

Ami*_*ien 39

我用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 
    }
}
Run Code Online (Sandbox Code Playgroud)

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>';
    }
}
Run Code Online (Sandbox Code Playgroud)

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>';
    }
}
Run Code Online (Sandbox Code Playgroud)

duration3:27.54640007秒

原始的2种方法之间没有太大的区别,但看起来它的速度要快得多,并且连接的次数更少

因为我怀疑我需要这么多数据,我想我会继续使用很多标签,代码缩进看起来更整洁,"查看源"布局更准确

  • 从它的外观来看,前两个例子输出的空白比最后一个例子多得多.这可能是运行时间更高的原因. (17认同)
  • 当我们想要优化时,+1 Mesuring非常重要.我们经常意识到这种优化是没用的. (5认同)

par*_*ars 13

您可以轻松忽略这两者之间的性能差异.凭借当今的现代计算资源,差异确实无关紧要.这种打印到屏幕的东西真的不用担心.你以前应该考虑很多其他的东西.除此之外,代码的最佳性能和可维护性之间始终存在争议.您无法始终尝试获得最佳性能.相反,您应该始终考虑性能问题以及您需要花费多少时间来改进它们.


小智 6

易于转换为伪代码的代码更好.这可以通过上面的例子证明.这需要更长的时间来说?

"Start php, do this 30 times:, then stop php.  Print this.  Start php, print this, stop php. Print this.  Start php, print this, stop php.Print this.  Start php, print this, stop php. Print this.  Start php, print this, stop php.Print this.  Start php, print this, stop php. Print this.  Start php, print this, stop php.Print this.  Start php, print this, stop php..."

"Start php, do this 30 times: print this, then add this to that, then add this to that, then add this to that, then add this to that, then add this to that, then add this to that..."

"Start php, do this 30 times: print this, print this, print this, print this, print this, print this, print this..."
Run Code Online (Sandbox Code Playgroud)

就我个人而言:

"Start php, define this, do this 30 times: add this to that.  Print." 
Run Code Online (Sandbox Code Playgroud)

关于解释器如何工作以及为什么一种方式比另一种方式更快的技术解释与新手无关.最好只知道经验法则:

  1. 越简单越好.
  2. 如果它不适合单个页面,那么它做得太多(分解).
  3. 如果你不能在索引卡上手写伪代码,那就太复杂了.

如果整体结果更简单,请使用更多标签.期.


Mar*_*ong 5

这个问题的真正问题在于内存使用.字符串连接和质量回显可以指数增加内存使用.

如果你垃圾邮件php标签你的代码变得不可读.

最佳解决方案是使用模板引擎,避免混合代码和表示.