包含PHP文件对性能有多大影响?

时间:2011-06-15 15:10:27

标签: php performance apc

问题几乎说明了一切,我正在开发一个大型项目,其中大多数调用php include()介于100到150个文件之间。平均而言,php花费的时间在150到300毫秒之间。我想知道这有多少是由于包含PHP脚本?我一直在考虑运行一个脚本来检查大多数访问过的文件是否有特定的调用,并将它们合并到一个文件中以加快速度,但对于所有人来说,我知道这没有任何影响。

我应该注意到我使用APC,我不完全了解APC在后台做了什么,但是我想它可能已经以某种方式缓存了我的文件,所以文件的数量并没有真正产生很大的影响?

对此主题的任何意见表示感谢。

当然,300毫秒不是很多,但如果我可以说,100毫秒甚至50毫秒,这是一个显着的提升。

编辑:

澄清我正在谈论通过php include / require加载文件。

2 个答案:

答案 0 :(得分:9)

文件加载是一件棘手的事情。正如其他人所说,唯一确定的消防方式是做一些基准测试。但是,以下是一些通用规则仅适用于PHP加载,而不适用于具有fopen的文件

  • APC会将其操作码缓存存储在共享内存中,这样您就可以在第一次加载时点击,但不会在后续加载时点击。
  • includeinclude_once(以及他们的require堂兄弟)实际上非常沉重。以下是一些提高速度的提示:
    • 使用文件的绝对路径(避免使用相对路径,如../foo.php
    • _once函数都需要检查以确保文件未通过符号链接包含,因为符号链接可以生成到同一文件的多个路径。这非常昂贵。 (见下一点)
  • 加载您需要的文件比调用include要便宜得多。使用自动加载器只在需要时加载类。
  • 本地磁盘几乎总是比网络存储更好。如果可能,如果您有多台服务器,请在每台服务器上保留源代码的副本。这意味着您需要在发布期间更新多个位置,但值得付出努力。

总的来说,这取决于您的硬盘速度。但与没有加载文件或从RAM加载文件相比,文件加载速度令人难以置信。

我希望有所帮助。

答案 1 :(得分:4)

这是相当多的文件,但如果使用框架(Zend,任何机会?)都不会出乎意料。包含那么多文件的影响主要取决于服务器硬盘的速度。无论如何,文件访问速度非常慢,所以如果可以的话,减少包含的数量。

APC可以/可以缓存内存中所有这些文件的操作码,这意味着在缓存失效/销毁之前不会再搜索磁盘。

  • 尝试关闭APC,看看它有多大区别。执行时间应该会有明显的飙升。

  • 尝试使用xdebug分析脚本。您很可能会发现其他问题(代码问题)会影响性能而不是文件访问。