我正在使用Zend Framework 1.11,Doctrine 2,一些Symfony 2组件和其他工具&库进行项目工作。优化我的表现
我试图优化使用Xdebug的性能& Webgrind。
我已经发现了像解析Ini配置等一些瓶颈,并缓存了。现在
,我只是意识到,自动加载是我的应用程序中最昂贵的部分:
Opl\Autoloader\ApcLoader->loadClass 274 31.36 43.86
Zend_Loader_PluginLoader->load 150 4.80 12.29
Zend_Loader_Autoloader->getClassAutoloaders 278 1.42 1.91
Zend_Controller_Router_Route_Regex->_getMappedValues 291 1.29 1.35
Doctrine\ORM\UnitOfWork->createEntity 85 1.24 3.18
如你我不使用默认的Zend_Loader_Autoloader
,我使用Opl
这是看到的,因为据我所知,比它快,我使用带有APC缓存的classMapLoader
,但与其他应用程序相比,它仍然有点慢。
我该如何优化?
我已经加载了大约250个类,它看起来只有〜40个很慢,其他人显示0,00为“总调用成本”,但其他人则在需求调用中从0,08增加到0,57。
顺便说一句,由于使用Opl自动加载器,它看起来在我的生产环境中APC只操作缓存“手动需要”的文件而不是自动加载器调用的文件。
谢谢你的伟大答案,事实上,我的问题是我从ZF1.7和Zend_Db及其交易从旧式应用程序迁移费率(由围攻给出)返回类似30/40/s的地方只有10,但我做了很多优化,如查询优化,可以减少全球请求时间,但我有点失望,有这样的速度。当然,购买新硬件是一种解决方案,它会是,但我不希望它成为解决方案。在看自动加载器时,看起来Doctrine需要比Zend Framework本身更多的文件。 – Trent 2011-12-19 13:10:13
考虑一下,如果你真的需要在你的应用程序中使用ORM。如果你不这样做,放弃原则,只使用* table data gateway *或* row data gateway * zend library offers。或者在PDO中使用PHP本地mysql驱动程序来坚持自己的数据库抽象。如果数据库是您的瓶颈,请将您的代码和数据库放在一起以获得更短的路径。这可能会减少ORM提供的一些舒适选项,但是通过创建自己的函数来获取数据并将数据推送到mysql存储,您的速度会更快,并且可以编写您自己的舒适代码。 – hakre 2011-12-19 13:18:51
我喜欢建议放弃各种东西(即减轻)。我不在乎“购买更好的硬件,这会自动优化你的代码”。这就好比说,如果赛马会太胖,会得到一匹更快的马。芯片供应商的勤奋工程师为我们提供更快的硬件而做出了惊人的工作。我想知道他们是否知道程序员是依赖于这个的,而不是让他们的代码脱离胖子? – 2011-12-19 14:20:05