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. が参考になる。