|
テーマ:私のPC生活(7398)
カテゴリ:ノウハウ・WEB
PHPでのWeb開発で、require,やrequire_onceでのファイル読み込みは、コストが高く、絶対パスでの記述が推奨されています。 チューニングをしている中で、Zendのクラスのロードの時間がかかっていることに気づき、ふとZendのクラスをみると、 reqire_once 'Zend/・・・' というぐあいに、相対パスで記述されていることい気づいた。 インストールの柔軟性の確保のためにこうしているのだろう。 試しに、ZendFrameWork自体に、絶対パスにするパッチを当ててみたところ、下記のように、かなり高速化が実現できた。 実施結果require 'Zend/Controller/Action.php' 0.039Sec ⇒ 0.021sec require '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 = 64k realpath_cache =120 として、パスのキャッシュが有効になったら、相対パス指定のままでも、下記にあまり劣らない速度がでました。 絶対パスへの置換は、実験的な扱いととらえていただき、上記キャッシュの指定を行うことが無難かと思います。 --------------------------------- 試験環境ちなみにその他の環境は下記の通り PHPは、5.24 Windowsのpathの1個目でZendのライブラリを指定 php.iniの realpath_cache_size = 64k realpath_cache-ttl = 120 ZendFrameWorkのパッチ手順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が有効に効いていれば、こんなに差が出ることはないと思うのですが・・・
▼ 楽天 検索キーワード ▼ 「Zend」 「PHP」 ↓ 検索はこちらから お気に入りの記事を「いいね!」で応援しよう
Last updated
2011.05.10 20:51:35
コメント(0) | コメントを書く
[ノウハウ・WEB] カテゴリの最新記事
|