问题几乎说明了一切,我正在开发一个大型项目,其中大多数调用php include()
介于100到150个文件之间。平均而言,php花费的时间在150到300毫秒之间。我想知道这有多少是由于包含PHP脚本?我一直在考虑运行一个脚本来检查大多数访问过的文件是否有特定的调用,并将它们合并到一个文件中以加快速度,但对于所有人来说,我知道这没有任何影响。
我应该注意到我使用APC,我不完全了解APC在后台做了什么,但是我想它可能已经以某种方式缓存了我的文件,所以文件的数量并没有真正产生很大的影响?
对此主题的任何意见表示感谢。
当然,300毫秒不是很多,但如果我可以说,100毫秒甚至50毫秒,这是一个显着的提升。
编辑:
澄清我正在谈论通过php include / require加载文件。
答案 0 :(得分:9)
文件加载是一件棘手的事情。正如其他人所说,唯一确定的消防方式是做一些基准测试。但是,以下是一些通用规则仅适用于PHP加载,而不适用于具有fopen的文件:
include
和include_once
(以及他们的require
堂兄弟)实际上非常沉重。以下是一些提高速度的提示:
../foo.php
)_once
函数都需要检查以确保文件未通过符号链接包含,因为符号链接可以生成到同一文件的多个路径。这非常昂贵。 (见下一点)include
要便宜得多。使用自动加载器只在需要时加载类。总的来说,这取决于您的硬盘速度。但与没有加载文件或从RAM加载文件相比,文件加载速度令人难以置信。
我希望有所帮助。
答案 1 :(得分:4)
这是相当多的文件,但如果使用框架(Zend,任何机会?)都不会出乎意料。包含那么多文件的影响主要取决于服务器硬盘的速度。无论如何,文件访问速度非常慢,所以如果可以的话,减少包含的数量。
APC可以/可以缓存内存中所有这些文件的操作码,这意味着在缓存失效/销毁之前不会再搜索磁盘。
尝试关闭APC,看看它有多大区别。执行时间应该会有明显的飙升。
尝试使用xdebug分析脚本。您很可能会发现其他问题(代码问题)会影响性能而不是文件访问。