对于初学者,这两个调用(require_once 和 include_once)都会仔细检查一个文件是否之前没有被包含过。
因此,他们实现这一目标的方法是在所有可用路径中搜索文件,并从本质上检查它是否之前没有混合过等等。
在后台发生的事情是他们评估所有不同的选项(例如多个包含路径等),然后通过从这个缩写形式创建真实路径,他们创建一个唯一标识符。只有一条相同的路径——不是两条。
这已经不是这个星球上最快的过程,并且通常发生在 PHP 的每个请求上。然后添加另一个昂贵的操作,即 stat 创建我称之为realpath的内容(realpath,因为它是realpath()所做的)来检查文件是否存在。
如果我错了,请纠正我,但 APC 特别针对这种情况进行了优化。
所以无论如何-现在谈谈require_once和include_once之间的区别,这是require_once在包含文件时评估文件(对于低级解析错误等)。这是一个额外的检查,如果你有足够的质量保证,解析错误永远不会潜入包含中,你可以摆脱它。
否则很难找到。:-)
(需要考虑的一点:您可以使用 require_once 进行开发,并在部署时将所有调用替换为 include_once。)
至于操作码缓存 - 我推荐APC。之前在stackoverflow上已经讨论过了。就个人而言,我/我们正在使用它一段时间(我们每天处理大约 10 万访问者,有 3 个前端和 1 个后端),我们非常高兴。APC 还针对 require_once/include_once 进行了优化。
一个非常酷的副作用是 APC 还允许您将 PHP 变量存储在内存中 - 某种持久性等。
几个额外的指针:
- 很多人声称可以使用__autoload加速任何应用程序。
- 使用操作码缓存,避免有条件的 require_once/include_once(例如在循环或控制流中)。
- 有人说include_或require_once中的/absolute/path/to/file.php比依赖include_path要快。
- include_path 中路径的顺序也很重要。
希望有帮助。