2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

遅い部分テンプレートを改善!!処理速度が早いrender

Last updated at Posted at 2020-02-20

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になる。

これだと一度しか部分テンプレートが読み込まれないから、処理速度が早まる。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?