10

许多框架spl_autoload_register()用于动态加载类(即控制器和模型)。关于自动加载和操作码缓存的问题有几篇文章。特别是一篇帖子有@cletus 的回复,其中引用了@Rasmus 的一些陈述,这些陈述被证明对于那些使用 APC 作为操作码缓存的人来说是令人讨厌的:

对于不影响操作码缓存性能的自动加载的任何可能替代方案,似乎没有任何讨论。

有没有办法解决自动加载的类没有被添加到字节码缓存的事实?

如果没有,是否有任何替代方法可以动态加载将被缓存的类?

4

1 回答 1

5

关于这个主题似乎仍然存在混淆,但在大多数情况下,它归结为易用性与性能。

Zend Frameworks 邮件列表中的一个很好的邮件列表线程是:

http://n4.nabble.com/ZF-and-Autoloading-td640085i20.html

现在,相关性就在这里,因为如果您从尚未定义的类继承,您可能依赖自动加载来定义它(尽管您也可能依赖包含),实际上自动加载工具的存在可能会鼓励您使用这样的遗产。但这不是带来麻烦的自动加载(参见 Ramus 在博客中的“它不仅仅是自动加载”中的一些麻烦事的例子)。所以正确的短语应该是“倾向于依赖自动加载的人也倾向于使用违反编译时绑定的代码”。当然,这不能被视为自动加载错误,而仅仅避免自动加载对此也无济于事——您还必须重写代码,以便发生编译时绑定。它与使用“新”的自动加载无关,

至于上述效果的减慢 - 即没有编译时绑定 - 代码确实变得有点慢,并且这样的代码可能会在一些晦涩的情况下导致操作码缓存出现一些麻烦(不是在自动加载情况下 - 但是在条件内定义类的情况下,或者,上帝禁止,根据条件创建不同的定义) - 但它与使用自动加载本身几乎无关。然而,减速的幅度似乎被人们大大夸大了——这没什么(我再说一遍要清楚——没什么) 与操作码缓存由于没有磁盘操作和编译阶段而带来的性能优势相比。您可能会编写一个显示显着放缓的人为基准,但我认为任何实际应用程序都不会注意到。

来源: http: //n4.nabble.com/ZF-and-Autoloading-td640085i20.html#a640092

于 2009-12-22T13:36:32.347 回答