複数行の SQL クエリ結果のレンダリングを高速化するために、PHP でデータ プロバイダー クラスを作成しています。基本的に、このクラスには一連の SQL 関連のプロパティとメソッドがあり、データのページ付け、並べ替え、最終的なレンダリングに役立ちます。後者に関しては、行を簡単にテンプレート化できるようにしたいので、行テンプレート ファイルをパラメーターとしてビュー ファイル (MVC モデル内) から呼び出すことができる render() というメソッドを作成しました。これは次のようになります。
public function render($row_template_file) {
if($result = mysql_query($this->query)) {
while($row = mysql_fetch_array($result)) {
include $row_template_file;
}
}
}
実際の方法はそれよりも洗練されています (テンプレート ファイルが存在するかどうかをチェックし、mysql_* 関数ではなくデータ抽象化クラスを使用するなど)、一般的な考え方は理解できます。行テンプレート ファイルは基本的に HTML であり、出力に直接送信されます。つまり、次のようになります。
<div class="row">
<div class="foo"><?php echo $row['foo']; ?></div>
<div class="bar"><?php echo $row['bar']; ?></div>
</div>
このアプローチは問題なく機能します。唯一の問題は、特に多数の行をレンダリングする場合に、ループ内の include() がパフォーマンス上の優れたアイデアではないことです。そのように行をテンプレート化する機能を維持しながら、それを置き換えることができるものはありますか? ここには同様の質問がほとんどありませんでしたが、提案されたすべての解決策には、私が避けたいロジックとプレゼンテーションの混合が含まれていました。最初の反復中に匿名関数を作成し、その後のすべての反復でそれを呼び出すことを考えていましたが、考えすぎているか、ここで車輪を再発明している可能性があります。何か案は?