我已经分析了我的代码并意识到,Zend_Loader :: loadClass需要花费很多时间(比如每个请求的100ms)。我明白了这一点 - 每个班级都要运行,这并不奇怪。
我们已经使用了操作码缓存,但我想要更多。我想要做的是将经常使用的类合并到一个文件中并在引导程序中要求该文件 - 从而使所有类都可以使用,将IO操作最小化 - 自动加载器甚至不会被触发;)
问题:每个请求(前端控制器,路由器,调度程序,变形器,控制器摘要,帮助程序代理等)实际上都需要很多类。这些类具有依赖关系 - 它们的接口或抽象类。我以为我能够创建一个自动化工具来检查这些依赖关系,这将允许我按照命令顺序将类插入到文件中。不幸的是,自动加载器不会按要求的顺序加载它们,而是在解析的代码中(因为它们来了)(对于Zend_Form_Element:Z_F_Element_Text,Z_F_Element_Xhtml,Z_F_Element,...)所以在自动加载器中转储类名是不行的:(
问题:您使用/是否有一个可以帮助我的工具?如果我对如何做到这一点有任何抽象的想法,我会很高兴自己实现它。
答案 0 :(得分:4)
我能给你的最好的答案是我读到的一篇文章,真的很糟糕,自动加载技术性能细节。
http://weierophinney.net/matthew/archives/245-Autoloading-Benchmarks.html
答案 1 :(得分:2)
您可以使用“包含文件缓存”至少提高Zend_Loader_PluginLoader加载的类的性能 - http://framework.zend.com/manual/en/zend.loader.pluginloader.html#zend.loader.pluginloader.performance
我想你可以将这种缓存方式扩展到Zend_Loader,虽然我不确定这是否会有所帮助或更糟糕。
答案 2 :(得分:1)
您可以手动执行此操作。请看这篇博文:http://blog.astrumfutura.com/2010/02/php-framework-benchmarks-entertaining-but-ultimately-useless/和这个预加载脚本:https://github.com/padraic/framework-benchs/blob/master/zend-1.10-wtfoptimised/data/preload/preload.php
答案 3 :(得分:0)
截至ZF2自动化工具存在。感谢EvanDotPro:
https://github.com/EvanDotPro/EdpSuperluminal
我也把它粗暴地移植到ZF1(请先测试 - 可能不是100%工作,但在我的情况下工作):