2011-09-18 15 views
7

Zend MVCのパフォーマンスが悪いと困ります。遅いZend FrameworkのMVC設定のプロファイリング

私だけdie()を行い、単一のコントローラを設定し、私はXdebugをを有効にして、私に語った私の要求にwebgrindをプルアップ:

789 different functions called in 2150 milliseconds (1 runs, 137 shown) 

私はそう長く取っている正確に何を決定する問題を抱えています:

[procedural]  {main} O 1 9 2150 
[class]  Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap O 5 7 1203 
[class]  Zend_Config_Ini->_processKey O 622  451  1191 
[class]  Zend_Config_Ini->_processSection O 2 49 1023 
[class]  Zend_Application_Bootstrap_BootstrapAbstract->_executeResource O 16 11 1017 

(上記はかなりそれが私のapplication.iniで定義されたクラスを発射ブートストラップです私に語った - しかし、私はものが遅い見当がつかない)

処理時間の大部分を取っているコードのどのステップを正確に特定するのが良い方法ですか?

+1

*(ヒント)* [Zend Frameworkパフォーマンスガイド](http://framework.zend.com/manual/en/performance。html) – Gordon

+0

@Gordonそれは場所でひどく古くなっています - その大部分はあまり効果的ではありません。中にはパフォーマンスが悪化するものもあります。 –

+0

@ジャニエの犯罪だけど、証拠なしで何かを主張する人と公式のリファレンスガイドとの間に選択肢があるなら、私は公式リファレンスガイドに固執する。私はそこに与えられたアドバイスで良い結果を出しました。 – Gordon

答えて

7

は、あなたの低速の関数呼び出しが何であるかを見つけるために出力をwebgrind拡大することができるはずです。また、プロファイリングセッション中にXdebugのfunction trace featureを使用して、関数呼び出しに関する詳細情報を取得することもできます。

一般的に言えば、可能な限りキャッシュを使用する必要があります。 MemcacheはAPCよりも遅いZend_Cacheバックエンドですが、コードの高速化のためにAPC拡張モジュールを(開発モードであっても)インストールする必要があります。 Zend Frameworkのクイックスタートon my blog(そのポストはイタリア語ですが、ベンチマークデータは英語です)への影響をベンチマークしました。結果はかなり印象的です。ホームページの3倍のスピードアップです。

Zend_Application設定ファイル(この例ではプロファイリング時間の半分を費やします)にもキャッシュの考え方を適用しました。私はZend FrameworkのプロジェクトリーダーであるMatthew Weier O'Phinneyとhereについて議論しました。私がしたのは、デフォルトのZend_Application_loadConfigメソッドを、解析されたファイルの結果をキャッシュするカスタムのメソッドでオーバーライドすることです。この戦略を実装する私のクラスhere on githubを見つけることができます。

+0

機能トレースは私が探していたものでした!また、あなたのapplication.iniキャッシュのアプローチは私の場合に有望です:) –

4

公式のパフォーマンスガイドで説明したようにライブラリのrequire_onceを削除した後、開発マシンにもZend Server CE、APC、またはeAcceleratorなどのオペコードキャッシュをインストールする必要があります。

また、あなたはapplication.iniに設定することができ、いくつかのリソースプラグインなどはZend_Db、はZend_Loader、などのよく行うために、データキャッシュを、必要とするかもしれない(私はここオペコードのキャッシングとの違いを説明していません)

ドン実稼働環境では、オペコードとメモリのキャッシュを使用することを忘れています(と私は本当にそう思っています)ので、近い条件でベンチマークする必要があります。

開発では、無効にするキャッシュを確実に定義することができます。そのため、msを調べる前に少なくとも2回行を続けてページを更新してください。

そして、あなたの "本当の"ボトルネックを心配し始めることができます。

これはZFブートストラップ性能に関するものです。しかし、あなたの質問はプロファイリングコードに関するものでした。私はそれを非フリーのツールを使用していますが、Kcachegrindと組み合わせるXdebugをは非常によく、また、それをしない:http://xdebug.org/docs/profiler

+0

どのツールを使用していますか?私はまだ良いPHPプロファイラを探しています。 – Fabio

+0

Zend Studio + Zend Debuggerを使用してプロファイルします。 My Zend DebuggerはZend Server CEにインストールされていますが、任意のランプスタックにダウンロードしてインストールすることができます。私はどこかでZend DebuggerもPhpStormで動作していると読んだことがありますが、デバッグだけでなく、プロファイリングもしているのかどうかわかりません。 –

+0

正直なところ、Xdebug + KcachegrindはZend Studioソリューションそれは私のクライアントのZend Server Entrepriseとの統合なので、それが唯一の理由です。 –

関連する問題