我正在尝试使用Xdebug& amp;来优化性能. 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上只有操作码缓存“手动需要”的文件,而不是自动加载器调用的文件.
如果这不是一个选项,请考虑创建一个构建系统,该系统可以预处理您的代码库并创建它的非开发版本以减少加载过程.这需要分析总是需要哪些文件,然后将它们全部编译成加载器优化的格式,可以是单个文件和/或静态类加载器映射.
然而,众所周知,Zend总是需要在内存中加载很多东西.即使使用像APC这样的PHP缓存也可能已经为您带来了一些东西(考虑使用前面提到的构建脚本进行预编译并优化指标突出显示的部分).
如果您的应用程序结构允许,还有另一种可能性:在请求之间将整个应用程序保留在内存中.这可以通过PHP Web服务器完成.完成后,代码只需要在服务器启动后加载,并且永远不需要再次加载.这仅适用于您自己的应用程序,如果它支持多个请求.一个好的封装应用程序,尤其是请求逻辑,可以很容易地采用.现有的解决方案是appserver-in-php.与您从APC获得的好处相比,您会惊讶地发现速度有多快.
也许这很有帮助.由于无法查看您的代码并且无法获得详细的指标,因此很难提出任何其他更具体的建议.你刚刚传递了一个关于幕后内容的片段,所以很难具体地告诉你.