3
これがRails固有の問題であるかどうかはわかりません。そのため、私はruby
とタグ付けしました。Rails 4:なぜパーシャルをレンダリングするのが速いのですか?
私は部分的にevent
レコードのコレクションをレンダリングしています。しかし、部分的にレンダリングすると、パフォーマンスが大幅に異なることがわかりました。
どちらのバージョンもまったく同じデータを使用していますが、変更するのは部分データをレンダリングするコードだけです。
ひょっとして、1つのバージョンが他のバージョンより常に4倍速いのはなぜですか?私は、私が取っているものを他の性能ヒットを...思ってしまう
スローバージョン(950msの合計要求時間):
<% events.each do |event| %>
<%= render partial: "events/event", locals: { event: event } %>
<% end %>
# Log output
Rendered events/_event.html.erb (1.1ms)
Rendered events/_event.html.erb (1.1ms)
...
高速化バージョン(250msの合計要求時間):
<%= render partial: "events/event", collection: events, as: :event %>
# Log output
Rendered events/_event.html.erb (58.7ms)
部分的にレンダリングすると、htmlが最初にコンパイルされます。最初の場合は 'events.length'回、2回目は一回しか起こりません。この状況(ループが遅い)は、DBクエリなど、Railsの他の場所でも発生します。それは "N + 1"と呼ばれ、 –