随着我们的 PHP5 OO 应用程序的增长(在大小和流量方面),我们决定重新审视 __autoload() 策略。
我们总是通过它包含的类定义来命名文件,因此类 Customer 将包含在 Customer.php 中。我们过去常常列出文件可能存在的目录,直到找到正确的 .php 文件。
这是非常低效的,因为您可能会遍历许多您不需要的目录,并且对每个请求都这样做(因此,会进行大量的 stat() 调用)。
我想到的解决方案...
- 使用指定目录名称的命名约定(类似于 PEAR)。缺点:扩展性不是很大,导致类名很糟糕。
- 提出某种预先构建的位置数组(propel 为其 __autoload 执行此操作)。缺点:在部署新代码之前需要重新构建。
-“即时”构建数组并缓存它。这似乎是最好的解决方案,因为它允许任何您想要的类名和目录结构,并且在将新文件添加到列表中时非常灵活。问题是:将其存储在哪里以及删除/移动的文件如何。对于存储,我们选择了 APC,因为它没有磁盘 I/O 开销。关于文件删除,没关系,因为您可能不想在任何地方要求它们。至于移动……这还没有解决(我们忽略它,因为从历史上看它对我们来说并不经常发生)。
还有其他解决方案吗?