代码之家  ›  专栏  ›  技术社区  ›  Aaron Yodaiken

使用if语句的php速度

  •  1
  • Aaron Yodaiken  · 技术社区  · 14 年前

    所以我正在做一个用老式(没有OOP)PHP编写的项目,在不久的将来不会完全重写。它目前的一个问题是它的懒散时间被浪费了 require 基于启动过程中的位置,超过100个文件。

    要求

    <?php
       echo 'hello world!';
    ?>
    

    <?php
       if(FALSE) {
           // thousands of lines of code here
       }
       echo 'hello world!';
    ?>
    

    如果是的话,要慢多少?

    3 回复  |  直到 14 年前
        1
  •  5
  •   Tim Fountain    14 年前

    两者之间的差别可以忽略不计。如果大多数执行时间当前都花在需要文件上,那么您可能会看到使用optcode缓存(如 APC ,如果你还没有。

    除此之外-基准测试,找出瓶颈所在。根据我的经验,在老式的过程式PHP应用程序中,requires通常是最慢的部分,但即使有许多包含的文件,如果这些文件都加在一起,成为一个“慢”应用程序,我也会感到惊讶。

    basic.php和complex.php之间的页面生成时间(由microtime()测量)约为~0.000004秒,因此真的不显著。apache bench的一些更全面的结果:

                         without APC         with APC
                    req/sec   avg (ms)  req/sec   avg (ms)
    basic.php:     7819.87     1.277    6960.49    1.437
    complex.php:    346.82     2.883     352.12    2.840
    require.php:   6819.24     1.446    5995.49    1.668
    

        2
  •  0
  •   Explosion Pills    14 年前

    需求确实有一些开销。100个可能需要很多。解析包含100个include的整个文件可能也很慢。需求的开销可能会让你付出更多,但这很难说。你可能还不够。

    所有的基准都是邪恶的,但我所做的是:

    运行了一个大约8000行的包含文件(每行没有做任何有用的事情,只是声明了一个变量)。与运行包含80行文件(相同声明)100次所需的时间相比。结果没有定论。

        3
  •  0
  •   Pekka    14 年前

    请记住,PHP将解析它看到的所有代码,即使它没有运行。

    处理a文件也需要相当长的时间,根据经验,很多代码即使没有执行,也会消耗相当多的内存。

    如果这是不可能的(例如,由于服务器的限制):如果函数以某种方式可以分为不同的类别,那么一种使事情变得更快和更轻松的可能性是(ab)使用PHP的 Autoloading 将函数作为静态类的方法放入单独的文件中。

    function xyz() {  ... }
    

    会变成

    class generic_tools
     {
      public static function xyz() {  ... }
     } 
    

    xyz() 被替换为 generic_tools::xyz();

    然后调用将触发包含(例如) generic_tools.class.php ,而不是同时包含所有内容。

    这将在多大程度上真正起到帮助作用,这主要取决于应用程序的架构以及功能之间的相互交织程度。