我现在正在编写一个 php 框架。require
我想知道当请求期间php /include
或require_once
/include_once
太多文件时它是否会变慢?
4 回答
当然会的。做任何事情太多次会导致减速。
不过,更严重的一点是,与内存中发生的任何事情相比,接触磁盘的 IO 操作非常慢。很多时候,在使用大型框架时,包括文件将是一个主要的性能因素(看看 Zend 框架......)。
但是,通常有一些方法可以缓解这种情况,例如 APC 和类似的操作码缓存。
有时也采用编程方法。例如,如果我没记错的话,Doctrine 1 能够将所有内容捆绑到一个巨大的文件中,以减少 IO 调用。
如果有疑问,请对使用您的框架编写的应用程序进行一些深入的分析,看看 include/require/etc 是否是主要的慢点之一。
是的,这会减慢您的申请速度。*_once
调用通常更昂贵,因为必须检查该文件是否已包含在内。有很多包含,捆绑了很多硬盘访问和大量内存使用。我已经使用 Zend 框架开发了应用程序,每个请求总共包含 150 到 200 个文件 - 您确实可以看到对整体性能的影响。
您包含的文件越多,就会增加一些负载。但是,如果您必须在 require 和 require_once 之间进行选择,则 require_once / include_once 会承担更多负载,因为服务器需要进行检查以查看同一文件是否已包含在其他地方。因此,如果您可以避免这种情况,至少您可以提高性能。
除非您使用缓存库,否则每次请求到来时,这些文件都会一次又一次地包含在内。当然,它会减慢速度。创建一个只include
-s 需要include
-ed 的框架。