新しいクラスに分割することにしたクラスのセクションがありました。
コード セクションを新しいクラスに移植したとき、foreach ループの実行がかなり遅いことに気付きました。
問題の一部を追跡して、最終結果の配列を保存する方法を決定しました。
私のコードの短縮版を見ると理解しやすいと思います。
元の移植コード: http://pastebin.com/2iBuqmgn より最適化された移植コード: http://pastebin.com/TYU1rHwU
最初の例では、$this->active_topics を直接操作していることがわかります。
2 番目の例では、foreach ループの後、ローカル変数を $this->active_topics に保存する前にローカル変数を使用しています。
元のループでは平均 1 秒のように見えましたが、より最適化されたループでは平均 0.85 を使用して実行されました。それらはまったく同じコンテンツを返すことになります。
ローカル変数を使用して、より最適化されたコードがより効率的なのはなぜですか?