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

Posted

技术标签:

【中文标题】PHP 包含文件和文件系统的性能影响【英文标题】:PHP included file and performance impact of filesystem 【发布时间】:2012-07-09 05:30:19 【问题描述】:

据我了解,当 php 遇到 include(或 require,或它们的 _once 版本)时,它会在文件系统中查找该文件并对其进行解析,就像代码在该位置时一样include 调用(文件中调用的return 除外)。

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

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

【问题讨论】:

如果例如包含文件中的代码不包含其他文件,则可以简单地将逻辑保存在字符串中并作为 eval care 运行,以避免繁重的 FILE IO。 这取决于许多因素,例如文件系统如何处理“流行”文件,这些文件是否缓存在 RAM、磁盘缓存、操作码缓存等。仅在一个非常简单的框架上,非优化的系统是否会每次都从物理旋转磁盘中读取文件... 你说得有道理!但是,假设操作系统知道如何有效地cache,并假设包含的文件不是很大——我相信这应该不是问题。 @deceze 见鬼,我们在问题发布大约一个小时后写了同样的事情...... :) 【参考方案1】:

我对 include()、require() 等的理解是,它的工作方式很像 C 预处理器 #include 指令,并且基本上运行所有代码,就好像它内联在当前文件的那个位置一样,你相信。

正如上面一些 cmets 所说,如果这些文件被频繁使用(例如,经常通过 include() 调用),它们很可能位于 RAM 或至少一个磁盘缓存中。

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

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

【讨论】:

以上是关于PHP 包含文件和文件系统的性能影响的主要内容,如果未能解决你的问题,请参考以下文章

影响分布式文件系统(如HDFSGPFS)性能的因素有哪些?

从系统的角度分析影响程序执行性能的因素

MySQL数据目录详解(SQL语句与表文件的对应关系操作系统对数据库对象名字的约束影响表最大长度的因素数据目录结构对系统性能的影响MySQL状态文件和日志文件)

实验总结分析报告:从系统的角度分析影响程序执行性能的因素

树形文件目录简介

从系统的角度分析影响write()程序执行性能的因素