3

xdebugを使用してアプリケーションのプロファイルを作成し始めたところ、すぐに結果に何か奇妙なことに気づきました。関数の1つはrequire_once、処理時間の約12%を占めていることが示されています。アプリケーション全体で他にもかなりの数の呼び出しがありrequire_once、それらはすべて処理時間の1%未満しかかかりません。

パフォーマンスrequire_onceが低いのは、他のファイルと大きく異ならない、または大きくないファイルが含まれているため、何が問題を引き起こしているのかわかりません。他の誰かがこのようなことを経験したことがありますか?

編集:もう少し情報を提供したかった。XAMPPを使用してWindowsでプロファイリングを行っています。通常、アプリケーションはUNIXボックスで実行されます。xdebugをボックスに取り込む簡単な方法がないので、その方法で結果を比較するのは現実的ではないかもしれません。

最後の編集:これが役立つ場合のコードのアイデアです(標準のCYAの法的な理由で意図的に曖昧になっています):

このクラスは、遅いインクルード(test.inc)を持つクラスです。

require_once('/xx/yy/zz/dao/basedao.inc');
require_once('/xx/yy/zz/vo/test.inc');

class TestDAO extends BaseDAO {
  // bunch of code to handle database records and return VO objects

そして、これは含まれているファイルです:

require_once('/xx/yy/zz/vo/basevo.inc');

class Test extends BaseVO {
  // bunch of properties, getters/setters, that kinda stuff

他にも、まったく同じ方法で問題なくビルドされたVO/DAOオブジェクトがたくさんあります。すべてが同じそれぞれのパス内にあります。

4

1 に答える 1

0

それは確かに奇妙に聞こえます。実際のコードを見ずに確実に解決するのは難しいでしょうが、追求する価値は間違いなくあります。シングルの合計プログラム時間の 12% は、require_once()非常に過剰に聞こえます。

しかし、調査の可能な手段についていくつかの考えを以下に示します。

  1. require_once()インクルードされたファイルのルックアップ テーブルを保持しているため、そのルックアップ テーブルを参照する作業が遅くなる可能性があります。これが原因である場合は、可能な限りrequire()ではなくを使用することで解決できます。require_once()

  2. おそらくそれはパスルックアップですか?ファイル名にパスを含めていますか? そうでない場合は、ファイルを見つけるために多くの場所をチェックインします。おそらく最初からそうではないので、ファイルを含める前にファイルを見つけるのに時間がかかります。これが原因である場合は、コード内のパスをより具体的にすることで解決できます。

それが役立つことを願っています。これがどのように機能するかを聞くことに興味があります。

ところで、コードの最大の問題領域がrequire_once(). require_once()プロファイラーのレポートにも表示される日を夢見ています。

于 2012-07-16T20:54:26.130 に答える