【问题标题】:PHP include(): File size & performancePHP include():文件大小和性能
【发布时间】:2011-01-18 21:13:27
【问题描述】:

一个没有经验的PHP问题:

我有一个 PHP 脚本文件,我需要在不同页面的很多地方多次包含该文件。

我可以选择将包含的文件分成几个较小的文件,并根据需要将它们包含在内...或者...我可以将它们全部保存在一个 PHP 文件中。

我想知道在这种情况下对 include() 使用更大还是更小的文件是否会对性能产生任何影响?例如,200KB 的文件和 20KB 的文件有性能差异吗?

谢谢。

【问题讨论】:

    标签: php include performance filesize


    【解决方案1】:

    肯定会有影响,所以一定要使用 include_once() 而不是 include()。您可以考虑使用具有包含缓存的 APC。

    【讨论】:

    • ggiroux...谢谢...当文件被缓存时呢?除非这是一个非常愚蠢的问题。
    • 如果它被缓存了,我想说影响非常小,因为它将存储在共享内存中的预编译字节码中。
    • include_once() 而不是 include() ?请对此进行扩展;由于该线程中已经提到的原因,它当然不会加快使用 include_once 的速度。
    【解决方案2】:

    200KB 和 20KB 的文件会有所不同...但您可能不会注意到:200KB 的文件并没有那么大——而且您通常会使用很多不“小”的文件,当您构建大型应用程序时。

    当您加载 .php 文件时,有两件事需要时间:

    • PHP 源代码被“编译”为“操作码”-- 相当于 JAVA 字节码
      • 默认情况下,每次包含 PHP 文件时都会执行此操作
      • 但是,使用诸如APC 之类的操作码缓存,这些操作码可以保存在内存中,并且不再每次都进行编译——这很好:这意味着更少的 CPU 使用,因为编译不会再做一次(只会偶尔做一次)
    • 操作码被执行
      • 根据您的脚本包含的内容,这可能需要一些时间,也可能不需要:
      • 如果文件仅包含函数或类定义,则不会花费太多时间:不会执行任何操作。
      • 如果文件包含说明,则需要更多时间^^


    顺便说一句:在一般情况下,您将获得更多的时间/cpu/资源来优化您的 SQL 查询,或者添加一些缓存机制,而不是考虑那些东西。

    【讨论】:

    • 感谢您的补充说明。
    • 即使使用 APC,考虑使用自定义 __autoload 函数 / spl_autoload_register - 我只能在调用类的自定义 MVC 框架中包含模型文件,而不是包含所有模型文件 -这为每个文件包含节省了大约 1 毫秒。因此,如果页面渲染时间为 80 毫秒,并且即使使用 APC(当包含很多内容时),您也可以通过仅包含您需要的内容来节省 20 毫秒,这可能是值得的。实施也只需要 10 分钟。
    【解决方案3】:

    小心include_once()(还有require_once()),它的运行成本比include() 高。每次运行include_once() 时,PHP 都会在决定是否加载文件之前查找已包含文件的内部索引。索引中包含的内容越多,此查找就越慢。 此外,当使用include()include_once() 时,请尽可能使用绝对路径,因为这比相对路径要快得多,因为您不会强制 PHP 为您计算出绝对路径。 正如 ggiroux 所说,像 APC 这样的某种形式的缓存将获得巨大的回报,并让人担心有多少包含调用与您无关(很大程度上)(除非您有一些写得不好的代码)。

    编辑--

    只有在您的代码库中有数千个 requiresincludes 时,才会担心上述调用。

    【讨论】:

    • 在网络上,每 100 毫秒很重要。您不需要数千个包含即可从中受益匪浅。
    • 你怎么看这个奇怪的帖子:seeit.org/2010/06/11/… 它声称 include_once() 实际上比 include() 更快?跨度>
    猜你喜欢
    • 1970-01-01
    • 2011-12-18
    • 2011-02-20
    • 2021-09-28
    • 1970-01-01
    • 2012-09-02
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多