7

新しいクラスに分割することにしたクラスのセクションがありました。

コード セクションを新しいクラスに移植したとき、foreach ループの実行がかなり遅いことに気付きました。

問題の一部を追跡して、最終結果の配列を保存する方法を決定しました。

私のコードの短縮版を見ると理解しやすいと思います。

元の移植コード: http://pastebin.com/2iBuqmgn より最適化された移植コード: http://pastebin.com/TYU1rHwU

最初の例では、$this->active_topics を直接操作していることがわかります。

2 番目の例では、foreach ループの後、ローカル変数を $this->active_topics に保存する前にローカル変数を使用しています。

元のループでは平均 1 秒のように見えましたが、より最適化されたループでは平均 0.85 を使用して実行されました。それらはまったく同じコンテンツを返すことになります。

ローカル変数を使用して、より最適化されたコードがより効率的なのはなぜですか?

4

1 に答える 1

14

クラス内の何かにアクセスする場合、PHP インタープリターは最初にメモリ内のクラスを見つけてから、属性がどこにあるかを調べる必要があります。単純なローカル変数では、クラス内の属性を検索する必要はなく、変数のメモリに直接アクセスできるため、少し高速です。

于 2013-01-29T08:42:13.027 に答える