PHP5框架:自动加载和操作码缓存

Cor*_*lou 10 php frameworks opcode-cache autoload

许多框架spl_autoload_register()用于动态加载类(即控制器和模型).关于自动加载和操作码缓存的问题有几篇文章.特别是一个帖子有@cletus的响应,它引用了@Rasmus做了一些声明,这些声明对于那些利用APC作为操作码缓存的人来说是不利的:

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

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

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

小智 5

关于这个话题似乎仍然存在混淆,但在大多数情况下,它归结为轻松与性能相关.

Zend Frameworks邮件列表上有一个很好的邮件列表线程:

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

现在,关联就在这里,因为如果你从尚未定义的类继承,你可能依靠自动加载来定义它(虽然你也可能依赖于include),实际上自动加载工具的存在可能会鼓励你使用遗产.但这并不是带来麻烦的自动加载(参见Ramus的"它不仅仅是自动加载"在博客中的一些麻烦的例子).所以正确的短语是"倾向于依赖自动加载的人也倾向于使用违反编译时绑定的代码".当然,这不能被视为自动加载错误,只是避免自动加载也无济于事 - 您还必须重写代码以便可能发生编译时绑定.例如,它与自动加载与"新"的使用无关.

至于上述效果的减速 - 即没有编译时绑定 - 代码确实变得有点慢,这样的代码可能会导致一些模糊的情况给操作代码缓存带来麻烦(不是在自动加载的情况下 - 但是如果类在条件内定义,或者,上帝禁止,根据条件创建不同的定义) - 但它与使用自动加载本身无关.然而,减速的数量似乎被人们大大减少 - 与没有磁盘操作和编译阶段的操作码缓存所带来的性能优势相比,它没有什么(我重复清楚 - 没有).你可能会组成一个人为的基准测试,显示出一些显着的减速,但我不相信任何真正的应用程序会注意到.

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

  • [更新链接](http://osdir.com/ml/php.zend.framework.general/2007-01/msg00132.html)完整报价. (2认同)