FuelPHP1.5.3でViewに渡すデータが多い場合のパフォーマンス ORMとDBでの比較
軽量なPHP FrameworkのFuelPHP1.5.3をできるだけパフォーマンスよく使いたいと試行錯誤中。
ViewにDBからselectした多数の結果(500件)を渡すときのパフォーマンスを調査している。
ORMとDBの性能差
これまでのテストでは、ORMのModel_Item::find() を利用していたが、DB::select を利用するとどうなるだろう。
-
output_filter有り
随分速い。0.707秒。 -
output_filter無し
なんと、0.176秒。この速度は魅力。
ざっとまとめ
どうもModel::find()の時は、SELECT結果を処理する際に、Query::hydrate で処理時間がかかっている模様。
[FuelPHP1.5.3でViewに渡すデータが多い場合のパフォーマンス][1]でのフィルタ有無と合わせてまとめてみた。
filter有り(秒) | filter無し(秒) | |
---|---|---|
Model::find(ORM) | 7.120 | 1.540 |
DB::select | 0.707 | 0.176 |
結果として選択肢としては、
-
ORMを使う・使わない・高速な一覧が必要な場合のみDB::Selectを使うなど。
-
フィルタはOFFにし、Viewに渡すデータを自前で必要最小限サニタイズ
-
いやいや開発メンバーがヤバイから必ずフィルタされたいのでON
などいろいろあるだろう。
今回は小規模&高速なレスポンスが欲しい&今後の機能追加の予定があまりないので、デフォルトのフィルタはOFF、ORMは使わない方向。
この辺りFuelPHPは柔軟に対応できる&ソース見ればだいたいの仕組みがわかるからFuelPHPにしてよかったように思う。
FuelPHP1.5.3でViewに渡すデータが多い場合のパフォーマンス