最新のPHPニュース

オブジェクト関係の処理を高速化するための方法

2006年07月26日

PHPでオブジェクト関係の処理を高速化するための方法が公開されています。

PHPでオブジェクト指向型プログラミングを行った場合について、その処理を高速化するための方法が、ブログ「JASLABS」にて公開されています。この記事では、PHPでオブジェクト指向型プログラミングを最も効果的に活用する方法を紹介していきます。将来的にはこの方法が効果的なものではなくなるかもしれませんが、知っておいて損はないでしょう。

掲載されているPHPオブジェクトを最適化する方法は以下のとおりです。詳細に関しては「JASLABS」ページをお読みください。

3つのテクニック:

  • 1. 使用する前に、すべての変数を初期化する。
  • 2. メソッド内で高頻度で使用されるグローバル変数やプロパティ変数は、いったんローカル変数に保存してから使う。
  • 3. 高頻度で使用されるメソッドは、派生クラス内に設置する。

 

メソッド内での挙動:

  • 1. メソッド内でのローカル変数のインクリメントが最も高速です。また、関数内でも、ローカル変数の場合は同じぐらい高速です。
  • 2. グローバル変数をインクリメントした場合は、ローカル変数をインクリメントした場合よりも、約2倍遅くなります。
  • 3. オブジェクトのプロパティ変数(例. $this->prop++)をインクリメントした場合は、ローカル変数をインクリメントするようにも約3倍遅くなります。
  • 4. 定義されていないローカル変数をインクリメントした場合は、初期化済みの変数をインクリメントするよりも約9~10倍遅くなります。
  • 5. 関数中でグローバル変数を宣言しただけでも、処理速度が遅くなります。おそらく、グローバル変数が存在するか、PHPが確認するためです。
  • 6. メソッドの実行速度は、クラスで定義されているメソッド数とは関係ありません。試しに10以上のメソッドをクラスに追加しても、パフォーマンスには影響はありませんでした。
  • 7. 派生クラス内のメソッドは、基本クラスで定義されたメソッドよりも高速に実行することができます。
  • 8. 引数が1つで中での処理を全くしない関数を呼び出した場合では、ローカル変数をインクリメントした場合の7~8倍の時間がかかりました。同じようなメソッドを用意した場合は、約15倍ほどの時間がかかっています。

 

この記事のコメントにて、著者のJustin SilvertonはPEAR::Benchmarkを使用していると記載しています。グローバル変数やメンバ変数の処理が遅いというのは、なかなか興味深い結果ではないでしょうか。

関連リンク

関連ニュース

この記事へのトラックバックURL

がるの健忘録

2006年07月27日 16:02 [言語][プログラミング][PHP]Tipsなのはわかるけど…

http://www.phppro.jp/news/58 ...

続きを読む

エセプログラマーの戯言

2008年01月10日 17:22 PHP | オブジェクト関係の処理を高速化するための方法

パフォーマンスを気にせず、プログラムを組んでいたら、とんでも...

続きを読む