PHP包括文件系统对文件和性能的影响

PHP包括文件系统对文件和性能的影响,php,filesystems,include,Php,Filesystems,Include,据我所知,当PHP遇到include(或require,或它们的\u一次版本)时,它会在文件系统中查找文件,并以相同的方式解析它,如果代码代替include调用(文件中调用的return除外) 因此,在繁忙的服务器上,很容易想象许多人会反复访问包含的文件(例如,连接到数据库或定义全局函数的文件)。这会对性能产生显著影响吗 通过将文件内容转储到相关位置来“编译”include是否有利?我对include()、require()等的理解是,它的工作原理非常类似于C预处理器#include指令,基本上

据我所知,当PHP遇到
include
(或
require
,或它们的
\u一次
版本)时,它会在文件系统中查找文件,并以相同的方式解析它,如果代码代替
include
调用(文件中调用的
return
除外)

因此,在繁忙的服务器上,很容易想象许多人会反复访问包含的文件(例如,连接到数据库或定义全局函数的文件)。这会对性能产生显著影响吗


通过将文件内容转储到相关位置来“编译”include是否有利?

我对include()、require()等的理解是,它的工作原理非常类似于C预处理器#include指令,基本上运行所有代码,就好像它在当前文件的该位置内联一样,正如你所相信的

正如上面的一些评论所说,如果这些文件被频繁使用(例如,通过include()不断调用),它们可能位于RAM中,或者至少位于磁盘缓存中

无论如何,PHP文件基本上都是JIT编译和缓存的,这一点毫无价值,所以您不应该注意到任何一种方式都会影响性能。(更详细的信息)


另外,作为旁注,与include()和require()相比,include_once()和require_once()确实有很大的开销,因此如果速度是一个因素,请尽量避免使用这些调用

例如,如果包含的文件中的代码不包含其他文件,则逻辑可以简单地保存在字符串中,并作为eval小心地运行,以避免繁重的文件IO。这取决于许多因素,如文件系统如何处理“流行”文件,这些文件是否缓存在RAM、磁盘缓存、操作码缓存等中。仅在非常简单的骨骼上,未经优化的系统每次都会从物理旋转磁盘读取文件…这是有道理的!但是,假设操作系统知道如何有效地
缓存
,并且假设包含的文件不是很大,我相信这应该不是问题。@deceze见鬼,我们在问题发布一小时后写了类似的东西…:)