renderは使い方を間違えると表示に読み込みが遅くなってしまう。
今回はパフォーマンスを意識して学習した。
NG:each doで部分テンプレート読み込み
each doは繰り返し処理なので、部分テンプレートもなんども読み込みする。
悪い例
# eachを使う処理はNG
<% @products.each do |product| %>
// 3つの書き方を記述しているが、each doを利用しているのでだめ
<%= render product %>
<%= render 'products/product', product: product %>
<%= render partial: 'products/product', locals: { product: product } %>
<% end %>
@productsが1000個の場合、1000回部分テンプレートを読み込む事になる。
処理が早い書き方
正解
= render partial: 'product', collection: @products, as: "product"
# partial: 'product' > _product.html.erbを読み込む
# collection: @products > 複数あるproductを1つずつ処理する。 > each doの代わりになる。
# as: "product" > @products の単体の変数 、部分テンプレートで利用する変数はproductになる。
これだと一度しか部分テンプレートが読み込まれないから、処理速度が早まる。