41

一个没有经验的PHP问题:

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

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

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

谢谢你。

4

3 回答 3

47

200KB 和 20KB 文件之间会有区别……但您可能不会注意到:200KB 文件并没有那么大——而且您通常会使用很多不是“小”的文件,当您'正在构建一个大型应用程序。

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

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


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

于 2010-02-19T17:22:04.057 回答
15

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

编辑 -

requires一旦你开始有几千个或includes在你的代码库中,担心上述调用只是一个问题。

于 2010-05-08T18:21:12.727 回答
1

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

于 2010-02-19T17:15:15.363 回答