Zend_Application を使う(2)
ブートストラップ周りをいじりだしてようやく 1.7x と同じ物が動くようになった。
設定ファイルのお話
サンプルやドキュメントでは application.ini にゴリゴリ view や session の設定を書かれてるのが多い。
デフォルトのブートストラップを使う分には良いのかもしれないけど、更に柔軟性を持たせたかったので分割した。
app.ini | フロントコントローラや PHP の設定 |
database.ini | データベースの接続情報 |
log.ini | ロギングの設定 |
plugin.ini | プラグインの設定 |
session.ini | セッションの設定 |
path.ini | オートロードの設定 |
routing.ini | ルーティングの設定 |
view.ini | テンプレートの設定 |
で、_initLog() とか _initRouting() みたいなのをブートストラップに書いて処理をするように。
テストをしやすいように例えばログを読み込むクラスを別に切り出して、_initLog() からはそのクラスを呼び出すようにした。
あとテスティングフレームワークは開発がストップしてると思われる PHPSpec から PHPUnit に変えた。
オートロードのお話
今回いじった所で一番大きな変化はやっぱオートロード周りだと思う。
今までは library/Zend のようなライブラリは Zend_Loader::registerAutoload でよろしくやってくれたけど、アプリケーションの方(modules/index/models とか)のオートロードはやってくれなかったので、自力でロードしてやる必要があった。
これを Zend_Loader_Autoloader_Resource を使うと簡単にやってくれるのが良い。
もっともデフォルトのままで使ってないので、色々いじる必要があったけど。
# 詳しくは id:sasezaki さん所の Zend_Application_Module_Autoloaderで、モジュールロードを手っ取り早く(デフォルトにそって)やる場合のメモ - 例えば、PHPを使う を参照
速度的なお話
速度的な面だと、1.7x と 1.8x で同じアプリを動かしてみて計測してみた。
Phwittr のソースで 自分のタイムラインが表示されてるのを 10 回計測。
# PEAR::Benchmark をエントリポイントの index.php の最初と最後に置いてブラウザでアクセス。
# PHP5.2.10 ブラウザは Safari4 を使用
回数 | 1.7x | 1.8x |
---|---|---|
1 回目 | 0.309057 | 0.427083 |
2 回目 | 0.222283 | 0.220425 |
3 回目 | 0.556351 | 0.216528 |
4 回目 | 0.227698 | 0.217324 |
5 回目 | 0.228946 | 0.477726 |
6 回目 | 0.231606 | 0.223311 |
7 回目 | 0.237623 | 0.216555 |
8 回目 | 0.226926 | 0.225251 |
9 回目 | 0.235425 | 0.221706 |
10 回目 | 0.240812 | 0.226065 |
平均 | 0.2716727 | 0.2671974 |
あんま変わらん結果になった。
まとめ
今まで結構苦心していたソース汚れがみるみる落ちて行く感じ。
http://d.hatena.ne.jp/noopable/20090515/1242394736
と id:noopable さんが書かれてたけど、全く同じ印象w
自分が汚いソースを書いてたかが証明された。
あ、あと 1.8x のアプリは Google Code Archive - Long-term storage for Google Code Project Hosting. が参考になる。