0

由于性能问题(基准测试),我尝试使用另一个自动加载器,而不是默认的 Zend_Loader_Autoloader。

我尝试了不同的方法,使用:

$autoloader->removeAutoloader(array('Zend_Loader_Autoloader', 'autoload'))
    ->setDefaultAutoloader(array($loader, 'loadClass'));

由于 Autoloader 与 Zend Framework 的大多数组件密切相关,因此我无法“删除它”。

我做了一个 Xdebug 一步一步调试,看起来 Autoloader 是这样工作的:

1) getInstance 2) 检查被调用的类根是否是已知的命名空间,以及是否存在自动加载器为其命名空间 3) 将非命名空间的自动加载器放入堆栈 4) 在每个自动加载器上尝试自动加载器,直到找到有效的。

但是,在我的情况下,我的自动加载器已经这样做了(我正在使用带有 classMap 策略的 Opl Autoloader),我已经用它们各自的路径注册了 namspace。

所以它看起来对我来说有点开销,因为我希望在绕过所有 Zend 检查的查找的非常乞求时使用我的自动加载器。

你有什么改进的想法吗?我如何在 Zend Framework 项目中有效地使用自定义(和高性能)自动加载器并使用 Zend_Loader_Autoloader

4

2 回答 2

1

自动加载器不是“高度链接”的。您始终可以使用您喜欢的每个 PSR-0 投诉自动加载器,但在这种情况下,您不应该使用Zend_Loader_Autoloader将自动加载器注册Zend_Loader_Autoloader到替换Zend_Loader_Autoloader;)

spl_autoload_register($myAutoload);
于 2012-01-02T11:48:30.840 回答
1

虽然 Zend 负责人 Mathew 的这篇文章本身并没有回答,但它可能有助于演示如何放入替换自动加载器(以及更有效的自动加载器)

http://mwop.net/blog/262-Backported-ZF2-Autoloaders

于 2012-01-02T12:23:58.967 回答