我登陆了这个链接:https://developers.google.com/speed/articles/optimizing-php
然后搜索变量副本并发现:Copy or don't copy extra variables in PHP?
所以我理解了上面的概念,但据我所知,下面的代码实际上是很好的做法,但sorta违背了不要复制语句。它几乎像“不要复制”必须有条件。我一直都明白,在每个循环上进行函数调用比存储(复制)更耗费资源。
$total = total();
for($i=0; $i<$total; $i++){
}
同样适用(最好的例子我可以想到使用Google的例子):
<?php
$description = strip_tags($_POST['description']);
?>
<img src="" alt="<?php echo $description ?>" title="<?php echo $description ?>" data-description="<?php echo $description ?>" />
我发现很难相信使变量副本的性能更受打击:
<img src="" alt="<?php echo strip_tags($_POST['description']) ?>" title="<?php echo strip_tags($_POST['description']) ?>" data-description="<?php echo strip_tags($_POST['description']) ?>" />
所以我猜上面“无缘无故”是相关的吗?
答案 0 :(得分:9)
如果复制变量成为性能问题,那么您的应用程序出现了严重问题,您需要担心的问题更严重。在99.99999%的情况下,这永远不会成为你的瓶颈。一目了然地避免复制变量是一种微观优化的行为。专注于编写干净可读的代码,而不是担心像这样的微小优化。谷歌过去的这篇文章实际上已经受到了很多批评,因为它看起来好像被其他随机误读的文章抓取随机信息的人迅速抛出。
答案 1 :(得分:2)
您链接的Google页面顶部引用了Hoare的格言Premature optimization is the root of all evil
。
不必要的副本(我发现)通常会使代码更具可读性。如果您使代码的可读性降低并且对性能产生可忽略的影响,那么这是一件坏事。如果您确信这段代码经常被调用以产生影响(并且您已经对此进行了分析以确认这一点),那么请继续。
正如你所指出的那些例子,你指出的实际上有充分的理由,因为你节省了额外的工作。然而,如果代码是关键的,那么再分析差异。
答案 2 :(得分:1)
我认为你误解了你要链接的文章。没有冒犯。 以你的例子:
<img src="" alt="<?php echo strip_tags($_POST['description']) ?>" title="<?php echo strip_tags($_POST['description']) ?>" data-description="<?php echo strip_tags($_POST['description']) ?>" />
在这种情况下,您将调用strip_tags 3次。当然病了,没用,最好复制结果。 因为如果php中编译的“strip_tags”有一个“kill a puppy”语句,你就会杀掉3而不是一个:(
google示例是:
$description = strip_tags($_POST['description']);
echo $description;
一次性使用。
我会说,如果你必须调用一个函数2次并获得相同的结果,最好复制。 代码可读性有时会随着复制而改善,但这不是主题。
我在表现上添加了我的个人经验: 在循环中使用多维关联数组有时会在数千次迭代(少于几十万次)的循环中受到性能影响。 将变量复制到一个简单的变量然后在循环中使用它要快得多。 我不能再提供这种经验了。