0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

そこまでログを意識していなければ、レンダリングがログに出ていても見過ごしてしまうと思います。
ただ、レンダリングはパフォーマンスに影響するので改善できるならしておきたいです。
image.png

今回はレンダリングを減らす方法を試してみたいと思います。

レンダリングを減らす方法

railsでレンダリングを減らす方法は、collectionです。
collectionを使って、同じレンダリングを再利用してあげれば良いです。
今回はcollectionのやり方で詰まったところもあったのでその部分も紹介していきます。

部分テンプレートの部分をひとつにまとめる

scaffoldでusersテーブルと関連ファイルを作成します。
index.html.erbはこのように記載されていると思います。
<%= render user %>の部分でレンダリングが個別に行われるため、頻繁にレンダリングが発生してしまいます。

app/views/users/index.html.erb
<div id="users">
  <% @users.each do |user| %>
    <%= render user %>

    <p>
      <%= link_to "Show this user", user %>
    </p>
  <% end %>
</div>

まずは上記のlink_toの部分を以下のように_user.html.erbにまとめます。

app/views/users/_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を渡すことで、同じレンダリングを再利用することができます。

app/views/users/index.html.erb
<div id="users">
  <%= render partial: "user", collection: @users %>
</div>

ログを確認

レンダリングが一つになっています。
image.png

renderのやり方で詰まったところ

partialを省略して、以下のやり方でやろうとしたのですがエラーが出てしまいました。

<%= render "user", collection: @users %>

image.png

partialはcollectionを使用するとき、省略できないみたいです。

終わりに

レンダリングを減らす方法をためしてみました。
パフォーマンスを意識し、レンダリング部分も意識していきたいです。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?