在PHP中查询文件系统是否有性能损失?

时间:2014-11-26 20:06:28

标签: php performance

多年前我被告知在PHP中使用“include”语句不会“降低”任何性能。但是当您查询文件系统时,例如运行“filemtime”或“readdir”。如果我在每个页面请求中执行这些操作,那是一个问题吗?谢谢!

1 个答案:

答案 0 :(得分:2)

在性能中包含语句“不花费任何成本”的原因是因为这些包含文件通常也被缓存。 PHP脚本的半编译版本可以存储在APC缓存中(参见:http://php.net/manual/en/book.apc.php

除了缓存之外,操作系统还会缓存文件访问权限,因此后续调用filemtime每次都不需要实际的磁盘访问。即使操作系统从硬盘驱动器请求信息,该驱动器也可能缓存了最新的请求。因此,存在多个级别的缓存,所有这些都是为了尽可能快地访问磁盘。

因此,出于这些原因,多次调用filemtime也不应该是一个大问题,但是如果你需要阅读很多不同的文件,那么缓存可能无法以最佳方式工作,而且你会有很多实际的磁盘I / O.事件来说,如果你有很多访问者,文件I / O可能会成为瓶颈。您可以通过升级硬件来解决此问题。突袭的SSD可能比单个旋转磁盘读取更快。

如果性能仍然存在问题,您可以自己将文件的文件时间存储在缓存中,例如APC或memcache,甚至是包含相关文件信息数组的PHP包含文件。当然,每次编写文件时都需要确保更新此缓存。并确保描述您所做的每项优化。如果您没有APC,则包含文件可能不会有任何好处。此外,即使数据本身在内存中,对memcache的请求也有一些开销。所以这些解决方案无法保证改进。

但与往常一样,如果您不需要,请不要开始实施此类优化。过早优化......:)

相关问题