はじめに
そこまでログを意識していなければ、レンダリングがログに出ていても見過ごしてしまうと思います。
ただ、レンダリングはパフォーマンスに影響するので改善できるならしておきたいです。
今回はレンダリングを減らす方法を試してみたいと思います。
レンダリングを減らす方法
railsでレンダリングを減らす方法は、collectionです。
collectionを使って、同じレンダリングを再利用してあげれば良いです。
今回はcollectionのやり方で詰まったところもあったのでその部分も紹介していきます。
部分テンプレートの部分をひとつにまとめる
scaffoldでusersテーブルと関連ファイルを作成します。
index.html.erb
はこのように記載されていると思います。
<%= render user %>
の部分でレンダリングが個別に行われるため、頻繁にレンダリングが発生してしまいます。
<div id="users">
<% @users.each do |user| %>
<%= render user %>
<p>
<%= link_to "Show this user", user %>
</p>
<% end %>
</div>
まずは上記のlink_toの部分を以下のように_user.html.erb
にまとめます。
<div id="<%= dom_id user %>">
<p>
<strong>Name:</strong>
<%= user.name %>
</p>
<p>
<strong>Email:</strong>
<%= user.email %>
</p>
</div>
<p>
<%= link_to "Show this user", user %>
</p>
collectionで部分テンプレートを再利用する
以下のように、colletionに@usersを渡すことで、同じレンダリングを再利用することができます。
<div id="users">
<%= render partial: "user", collection: @users %>
</div>
ログを確認
renderのやり方で詰まったところ
partialを省略して、以下のやり方でやろうとしたのですがエラーが出てしまいました。
<%= render "user", collection: @users %>
partialはcollectionを使用するとき、省略できないみたいです。
終わりに
レンダリングを減らす方法をためしてみました。
パフォーマンスを意識し、レンダリング部分も意識していきたいです。