2010-12-13 11 views
1

私は今ではPHPフレームワークを開発しており、独自のCMSを使用して10か所のサイトで使用しています。PHPトラッキング関数の実行時間

これは非常に複雑で、特定のクラス/機能の遅延が増えているようです。

私は、最大の遅延がどこで発生しているかを知りたいが、これについてどうやって行くのかはわかりません。

私はxdebugをインストールしようとしましたが、うまくいかず、とにかく使い方がわかりません。

誰もがクラスや関数への呼び出しを追跡したり、それらの時刻を取得する方法を知っていますか?

何か助けていただきありがとうございます。

+1

プロファイラが必要なので、xデバッグを知ることができます –

+2

**有効ではありません**有効な問題の説明ではありません。 XDebugの仕組みがわからない場合は、[ドキュメントを読む](http://www.xdebug.org/docs/)か、問題を適切な質問に載せてください。いずれの場合でも、XDebugが最適です。 – Gordon

+1

[Good Free PHP debugger?](http://stackoverflow.com/questions/1494288/good-free-php-debugger/1494339#1494339) – Gordon

答えて

0

最大の遅延がどこで発生しているかを知り、それについてどうやって行くのかが分かりません。

誰もが最初に本能を感じるのは、メソッドで使用された時間を計測し、何回呼び出されたかをカウントし、徐々に絞り込み、直感を使って修正可能なものを賢明に推測することです。しかし、時間についてではなく、必要性の観点から、それについて考える別の方法があります。

プログラムはコールツリーを処理します。メインルーチンはAを呼び出し、Bを呼び出します。 AはC、Dはコールツリーを歩いています。単純なステートメント、システムコール、およびI/Oである葉に至るまでです。 これらの活動のすべてを単ににする必要がある場合は、を実行する必要があります。できるだけ早くプログラムを実行してください。

遅延があるため、これらのアクティビティの一部は厳密には必要ではなく、厳密に必要とされていないブランチの1つ(コールポイント)には必要ありません。

あなたの遅延は50%の時間かかるとします。その後、これらのコールポイントはアクティブで、コールスタック上では50%の時間です。したがって、ランダムにプログラムを一時停止してスタックを表示すると、それが表示される確率は50%です。これを10回行うと、そのうち5つに多かれ少なかれ表示されます。

実際に、random pausingを実行してスタックを調べると、コールポイントが1つのサンプルだけに表示されても何も表示されません。しかし、それが複数のサンプルに表示される場合は、となります。実行することを避けることができれば、あなたは遅延を発見しました。これを修正すると、プログラムが速くなります。さらに、この種の精査から逃れることのできる遅れはほとんどありません。

プログラムが大きくなり複雑になるにつれて、このように厳しく必須でないコールポイントは、バグのように忍び寄る傾向があります。バグとは異なり、彼らはあなたがそれらを修正することを要求しません。彼らはプログラムを遅くするだけなので、これをしばらくしておくのは良いことです。

関連する問題