许多框架利用spl_autoload_register()动态加载类(即控制器和模型)。有几篇关于自动加载和操作码缓存问题的文章。其中一篇文章特别得到@cletus的答复,其中提到@Rasmus发表了一些声明,证明对那些使用APC作为操作码缓存的人来说是令人讨厌的:
对于不影响操作码缓存性能的自动加载的任何可能的替代方案,似乎没有任何讨论。
是否有一种方法可以绕过自动加载的类没有被添加到字节码缓存的事实?
如果没有,是否有任何替代方法来动态加载将被缓存的类?
发布于 2009-12-22 13:36:32
对于这个话题,似乎仍然存在混淆,但在大多数情况下,这归结为简化与性能的关系。
一个很好的邮件列表线程将是Zend框架邮件列表中的这个线程:
http://n4.nabble.com/ZF-and-Autoloading-td640085i20.html
现在,关联就在这里了,因为如果您继承了尚未定义的类,您可能会依赖于autoload来定义它(尽管您也可能依赖于
),而且自动加载工具的存在可能会鼓励您使用这种继承。但这并不是给你带来麻烦的自动加载(看看Ramus在博客中的“它不仅仅是自动加载”中的一些麻烦的例子)。因此,正确的说法应该是“倾向于依赖自动加载的人也倾向于使用不需要编译时绑定的代码”。当然,这不能被看作是autoload的错误,避免自动加载也于事无补--您还必须重写代码,这样编译时绑定就可以发生了。例如,它与“新”一词的使用没有任何关系。
至于上述影响的减缓--即没有编译时绑定--代码确实会变得有点慢,在一些不知名的情况下,这些代码可能会导致一些操作缓存(不是在自动加载情况下--而是在类是在条件内定义的情况下,或者(上帝禁止)根据条件创建不同的定义)--但它几乎与使用自动加载无关。然而,由于没有磁盘操作和编译阶段,放缓的程度似乎被人们大大地夸大了--与操作码缓存所带来的性能好处相比,它没有什么(我重复一遍--没有)。您可能会编写一个人工基准,显示出一些明显的放缓,但我不相信任何真正的应用程序都不会注意到。
来源: http://n4.nabble.com/ZF-and-Autoloading-td640085i20.html#a640092
https://stackoverflow.com/questions/1941541
复制相似问题