PHP Zendframework インクルード(require_once) 高速化の裏ワザ
PHPでのWeb開発で、require,やrequire_onceでのファイル読み込みは、コストが高く、絶対パスでの記述が推奨されています。チューニングをしている中で、Zendのクラスのロードの時間がかかっていることに気づき、ふとZendのクラスをみると、 reqire_once 'Zend/・・・' というぐあいに、相対パスで記述されていることい気づいた。インストールの柔軟性の確保のためにこうしているのだろう。試しに、ZendFrameWork自体に、絶対パスにするパッチを当ててみたところ、下記のように、かなり高速化が実現できた。実施結果require 'Zend/Controller/Action.php' 0.039Sec ⇒ 0.021secrequire 'Zend/View.php' 0.024sec ⇒ 0.0123sec require 'Zend/Session.php' 0.020sec ⇒ 0.009secディスクの遅いノートPCのWindowsXP環境の測定なので、高速なサーバ環境のLinuxではまた違う結果になるとは思いますが、多少の効果は期待できます。初期のクラスのロードだけでなく、クラス継承して実行しているところでも、あらたにrequire_onceがあるのか、多少速くなった。---------------------------------【2011/5/10 追記】php.iniにてreal_path_cache_size = 64krealpath_cache =120として、パスのキャッシュが有効になったら、相対パス指定のままでも、下記にあまり劣らない速度がでました。絶対パスへの置換は、実験的な扱いととらえていただき、上記キャッシュの指定を行うことが無難かと思います。---------------------------------試験環境ちなみにその他の環境は下記の通り PHPは、5.24 Windowsのpathの1個目でZendのライブラリを指定 php.iniの realpath_cache_size = 64k realpath_cache-ttl = 120ZendFrameWorkのパッチ手順1)Library配下のZendフォルダ全体を Zend_bkupとしてバックアップ2)Library配下のZendフォルダの文字列置換 「require_once 'Zend/」 ⇒ 「require_once C_ZEND_ROOT.'/Zend/」3)アプリの先頭でZendのインストール先ディレクトリを定義する define('C_ZEND_ROOT','c:/・・・・・/library'); ※2)の置換では、eclipseを用いました Library配下のZendフォルダをeclipseのプロジェクトとして設定 eclipseのSearch>Fileで上記の置換を実施 5000か所近くリプレースされましたパッチの戻し手順バックアップをとった 「Zend_bkup」フォルダとパッチした「Zend」フォルダを入れ替えるだけで簡単に元に戻せます。 「Zend」フォルダを「Zend_20110417」にリネーム 「Zend_bkup」フォルダを 「Zend」にリネーム上記操作で戻ります。基本的に、絶対パスにしただけの簡単なパッチとはいえ、5000か所近くリプレースされたので、実際の運用に適用するのは怖いものがありますが・・・そもそもreal_path_cacheが有効に効いていれば、こんなに差が出ることはないと思うのですが・・・【送料無料】PHP HACKS価格:3,780円(税込、送料別)【送料無料】入門PHPセキュリティ価格:1,890円(税込、送料別)【送料無料】PHP:The Good Parts価格:1,890円(税込、送料別)▼ 楽天 検索キーワード ▼「Zend」「PHP」↓ 検索はこちらから