我正在使用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