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有り

    fuelphp_many_list_db_filter_on
    随分速い。0.707秒。

  • output_filter無し

    fuelphp_many_list_db_filter_off

    なんと、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
fuel_graph

結果として選択肢としては、

  • ORMを使う・使わない・高速な一覧が必要な場合のみDB::Selectを使うなど。

  • フィルタはOFFにし、Viewに渡すデータを自前で必要最小限サニタイズ

  • いやいや開発メンバーがヤバイから必ずフィルタされたいのでON

などいろいろあるだろう。

今回は小規模&高速なレスポンスが欲しい&今後の機能追加の予定があまりないので、デフォルトのフィルタはOFF、ORMは使わない方向。

この辺りFuelPHPは柔軟に対応できる&ソース見ればだいたいの仕組みがわかるからFuelPHPにしてよかったように思う。

FuelPHP1.5.3でViewに渡すデータが多い場合のパフォーマンス