【问题标题】:will White Spaces, Comments, Empty Lines increase PHP excution time? [duplicate]空格、注释、空行会增加 PHP 执行时间吗? [复制]
【发布时间】:2013-09-02 06:49:26
【问题描述】:

我有很多天的疑问。在我写的每一个 PHP 代码中,我都会写很多 cmets,留下很多空格,并在 section 和 section 之间留下 4 到 5 个空行(为了让我清楚)

所有这些空格、cmets、空行会使我的 PHP 代码运行缓慢吗?

非常感谢个人经历:)

【问题讨论】:

  • 如果你使用的是 PHP 加速器(如果你关心性能,你应该这样做)然后不,他们不缓存源代码,但字节码是相同的留白很重要。
  • 你可以自己做一个测试。保存当前时间,创建一个 100 多次迭代的循环并调用您的函数。保存完成时间并显示该过程花费了多长时间。现在从您的函数中删除所有其他内容(空格等)并重新运行循环并查看差异。
  • @JoachimIsaksson 谢谢 :) 但我从未听说过 PHP 加速器。我现在会搜索它..再次感谢:)
  • @jeff 感谢您抽出宝贵时间 :) 我会这样做 :-) 我会在这里更新我的结果 :)
  • @BlackCoder Here 是 APC 的安装说明(阅读 cmets,您的操作系统可能会在其中介绍)

标签: php execution execution-time


【解决方案1】:

这实际上是 IO 和硬盘驱动器速度的问题。如果您的裸文件为 10KB,而 cmets 和换行符增加了 4KB,那么硬盘驱动器花费在读取更多 KB 上的额外时间就是您需要进行基准测试的时间(顺便说一句,它可以忽略不计),甚至不值得您花时间。

如果您开始进行微优化,那么您就有可能使您的代码难以阅读和维护。

加快代码速度的最佳方法是在必要时重构代码,并且不要做像这个粗略的示例那样明显占用资源的愚蠢事情:

<?php

$arr = array(); // pretend it has 50,000 items

//GOOD IDEA: count the array once and reference that number
$arr_count = count($arr);
for($i=0; $i < $arr_count; $i++){
    echo $arr[$i];
}


//BAD IDEA: re-counting the array for every iteration
for($i=0; $i < count($arr); $i++){
    echo $arr[$i];
}

?>

在你完成使用后取消设置一个大数组比等待垃圾收集器启动要好。例如:从数据库中提取数据并循环通过它。完成后取消设置数据并继续编码。

【讨论】:

  • MonkeyZeus,谢谢 :) 我学到了新东西 :-) 是的,我写越来越多的 cmets 文件大小增加,我的服务器必须准备好那个大文件 :) 如果我使用更少的 cmets.. . 我的服务器可能会读取同一个文件 2 次,而不是每秒读取 1 次。
  • 完全可以忽略不计。我有很多包含 1000 多行代码的文件,它们大约 8KB。不过,您也应该始终考虑 include() 文件的大小。如果您想了解硬盘驱动器的性能如何影响某些东西,那么您需要研究称为“Seek Time”和“Allocation Unit Size”的东西。完成研究后,您可能只需要购买 SSD :)
【解决方案2】:

并非如此,这是一般脚本和编码的简单答案。
如果你不得不考虑在这里和那里获得几毫秒,并且删除 cmets 是有影响的,A) 你有太多 cmets,B) 你已经知道这一切并且正在执行基准测试等。

cmets 的数量通常与您拥有的代码数量成正比。即一两行用于加载 IF/ELSE 的 cmets,将 vars 设置为 POST 或 SESSIONS 等,以及 DB 查询等。由于 PHP 解析脚本的大部分时间是打开文件、访问内存、检查数以千计的东西包括缓存等,读取和执行代码,访问数据库等,忽略您的 cmets 所花费的时间可能是 .001%

您和可能的其他开发人员使用注释来理解代码。只要保持它们整洁,并尽量保持它们尽可能简短,同时保持简洁、真实和有用。

【讨论】:

  • James,非常感谢您抽出宝贵时间 :) 但是 My.Money 已经解释得很清楚了 :) 我明白了重点....所以只有 1+ 适合你 :-)
  • 没有问题。享受基准测试的乐趣,我敢打赌会很有趣:)
  • 詹姆斯,基准测试?另一个新事物 :) 将对此进行研究 :) 谢谢
【解决方案3】:

考虑下面的代码。

<?php
    $time = round(microtime(true) * 1000);
    for($i = 0; $i < 1000000; $i++) {
        /*


        */
    }
    echo (round(microtime(true) * 1000) - $time) . "<br/>";


    $time = round(microtime(true) * 1000);
    for($i = 0; $i < 1000000; $i++) {
    }
    echo (round(microtime(true) * 1000) - $time) . "<br/>";
?>

有时第一个更快,有时第二个更快。所以 cmets 不会影响速度。

【讨论】:

  • Logan,感谢您抽出宝贵时间 :) 我要亲自测试一下。我很快就会在这里发布结果:-)
  • +1 为您服务。再次感谢您抽出宝贵时间:)
【解决方案4】:

运行代码时,注释和空格将被完全忽略。一旦你完成并且代码正在做它的事情,你可以认为所有额外的东西都被完全清除了。

额外的空白和 cmets 仅供您和其他编码人员更好地阅读和理解您的代码。事实上,如果您使用额外的空格和 cmets,程序员会因为您编写和提供糟糕的代码而对您生气!

【讨论】:

  • 感谢您抽出宝贵时间 :) 我将自己对此进行试验,并将结果发布在这里 :)
  • 为你+1 :) 再次感谢!
猜你喜欢
  • 2011-10-23
  • 1970-01-01
  • 2014-04-29
  • 2011-07-05
  • 2018-01-02
  • 1970-01-01
  • 2012-05-16
  • 2011-12-06
  • 2019-09-08
相关资源
最近更新 更多