【问题标题】:Does the quantity of <?php and ?> tags affect performance? [closed]<?php 和 ?> 标签的数量会影响性能吗? [关闭]
【发布时间】:2014-03-12 20:54:36
【问题描述】:

在我的 php 文件中,我想知道开始和结束标记是否会对性能产生影响。

即。

<?php echo 'Hello world'; ?>
<?php echo 'Hello world'; ?>
<?php echo 'Hello world'; ?>
<?php echo 'Hello world'; ?>
<?php echo 'Hello world'; ?>

对比

<?php
  echo 'Hello world';
  echo 'Hello world';
  echo 'Hello world';
  echo 'Hello world';
  echo 'Hello world';
?>

如果有,有什么影响?

【问题讨论】:

  • 无法衡量。编写代码,以便您可以阅读和维护它。解析器优化通常是不值得您花时间进行的微优化。
  • 我怀疑现实生活中是否会出现重要的情况。
  • 每个认为这主要是基于开放的人都在使用他们的意见来关闭一个合法的问题。干得好。
  • @albert:然后重新打开它并关闭它作为直接发布在它上面的链接的副本。无论哪种方式,它都不是好的内容(要么是糟糕的,要么是重复的,这两者在这种规模的网站上都是有问题的)......

标签: php wordpress performance zend-framework


【解决方案1】:

它对性能有影响吗?是的。仅仅是因为有更多的文本供解析器解析。它必须有影响。是的,它会产生可衡量的影响。

它会产生有意义的影响吗?一点都不。即使您的应用程序中有数百万个,您也很难看到任何差异。是的,将使用更多的时钟周期,但微不足道...

更重要的是要注意这两段代码通常并不相同。 PHP 将在关闭 ?&gt; 后删除一个新行,但 ?&gt; 之后的任何其他字符将呈现在输出中。所以?&gt;之后的尾随空格或多个换行符将直接呈现。

所以我的建议是忽略性能,编写正确且更易读的代码(语义上更正确的代码)。并忽略小的性能差异......

【讨论】:

  • 不,他们都会产生第二个版本,因为任何输出都没有\n。
  • @PhilPerry 在这种特殊情况下,是的,因为解析器使用?&gt; 剥离了换行符,但是如果有第二个换行符或空格,则会呈现它。答案已更新。
  • 专业提示:&lt;?= 是 &lt;?php echo 的简写,与短标签不同。只是把它放在那里,因为这个问题涉及可读性和模板。
  • @MobyD:它们是相同的(&lt;?="foo"?&gt; 与&lt;?php echo "foo"; ?&gt; 完全相同)。 Proof in Opcodes...
【解决方案2】:

我想说的是在不牺牲可读性/功能的情况下尽可能地整合 PHP 包装器。除非你特别有理由打破(或使用) PHP(例如输入相当数量的 HTML),否则为什么要这样做?

对性能的影响很小,而且无论如何都是服务器端的。如果您真的很担心,您可以测试您的页面加载时间,但我敢打赌,测试它所花费的时间是它所增加的实际负载的指数。

举个例子:

<?php
  $foo = 'writing code';
  echo "<h1 class=\"hstyle4\">Hello World</h1>";
  echo "<p>I am {$foo}, specifically HTML, inside of PHP using echo.";
  echo 'but I could just as easily have broken it into html and used only what I needed.</p>';
?>

对比

<?php $foo = 'writing code'; ?>
<h1 class="hstyle4">Hello World</h1>
<p>I am <?php echo $foo; ?>, specifically HTML, outside of PHP. It's probably a lot more readable this way, and doesn't impact the server nearly as much by parsing unnecessary code that could have easily been handled another way.</p> 

【讨论】:

  • 您是“正确的”,但可能不是您认为的原因(或认为,3 年前您回答时)。前言:根据以下信息而不是代码读取方式做出决策是微优化,这是万恶之源;不要这样做。这些示例中的每一个都将转换为一个ASSIGN 指令和三个ECHO 指令。然而,第一个例子,因为它使用插值,也需要首先生成一个字符串,这使得它更加复杂。 first opcodes 与 last opcodes.
猜你喜欢
  • 2011-04-05
  • 1970-01-01
  • 2021-04-18
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 2011-05-21
  • 2015-10-29
相关资源
最近更新 更多