PHP包含文件及文件系统的性能影响

3
根据我的理解,当PHP遇到include(或require,或它们的_once版本)时,它会在文件系统中查找文件,并像在include调用的位置一样解析它(除了在文件中调用return之外)。
因此,在繁忙的服务器上,很容易想象许多人会重复地访问包含的文件(例如连接到数据库的文件,或定义全局函数的文件)。这会对性能产生明显影响吗?
将文件内容转储到相关位置,是否有利于“编译”包含文件?

如果包含的文件中没有包含其他文件,则可以将逻辑简单地保存在字符串中并作为 eval 运行,但要小心避免繁重的文件 IO。 - Khurram Ijaz
这取决于许多因素,例如文件系统如何处理“热门”文件,无论是缓存在RAM、磁盘缓存、opcode缓存等中,只有在非常基础的、未经优化的系统上,文件才会每次从物理旋转磁盘读取... - deceze
你说得有道理!但是,假设操作系统知道如何有效地进行缓存,并且假设包含的文件不是很大 - 我相信这应该不是问题。 - Nir Alfasi
1
@deceze 嗨,我们大约在问题发布后一个小时写了差不多相同的东西... :) - Nir Alfasi
1个回答

1

我对include(),require()等的理解是它们的工作方式很像C预处理器中的#include指令,并且基本上将所有代码作为当前文件中的内联代码在该位置运行,正如您所认为的那样。

正如上面的一些评论所说,如果这些文件经常被使用(例如通过include()不断调用),它们很可能会存储在RAM或至少是磁盘缓存中。

值得注意的是,PHP文件本质上是JIT编译和缓存的,因此无论哪种方式,您都不应该注意到性能损失。 (更详细的信息here)。

另外,顺便提一下- include_once()和require_once()与include()和require()相比确实有显着的开销,因此如果速度是一个因素,请尽量避免使用这些调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接