4

私の見解では、パーシャルをレンダリングしています。これは実際には、テーブルに500〜600回表示される行要素です。私はすべてのアソシエーションを熱心にロードしました。ただし、問題は、同じパーシャルでレンダリング時間が突然異なる場合があることです。

私のRailsサーバーo/p:

Rendered admin/invoices/_update.html.erb (1330.3ms)
Rendered admin/invoices/_update.html.erb (4.8ms)
Rendered admin/invoices/_update.html.erb (4.8ms)
Rendered admin/invoices/_update.html.erb (8.8ms)
Rendered admin/invoices/_update.html.erb (4.4ms)
Rendered admin/invoices/_update.html.erb (1309.9ms)
Rendered admin/invoices/_update.html.erb (4.7ms)
Rendered admin/invoices/_update.html.erb (4.6ms)
Rendered admin/invoices/_update.html.erb (4.6ms)
Rendered admin/invoices/_update.html.erb (1322.6ms)
Rendered admin/invoices/_update.html.erb (4.2ms)

また、毎回時間がかかる特定の行はありません。

私のビューファイル:

<% @updates.each do |update| %>
<%= render :partial => 'update', :locals => {:user => update[0]} #each of this is  a row %>
<% end %>

更新:これがこれを行うための良い方法であるかどうかも提案しますか?つまり、パーシャルを何度もループします。ページ付けとAjaxを使用して物事を固定することはできません。他のアプローチ。

4

2 に答える 2

6

パーシャルは、コレクションのレンダリングに非常に役立ちます。:collectionオプションを使用してコレクションをパーシャルに渡すと、パーシャルはコレクション内のメンバーごとに1回挿入されます。

<%= render :partial => 'update', :collection => @updates %>

これの省略形もあります。@updatesが更新インスタンスのコレクションであると仮定すると、これをindex.html.erbに書き込むだけで、同じ結果が得られます。

<%= render @updates %>

Railsガイドのセクション3.4.5で、これについて詳しく説明しています。

于 2013-01-11T18:39:22.323 に答える
4

レンダリングでラグが急上昇する理由はわかりませんが、順序を逆にすることを強くお勧めします。部分的な更新をすべて行い、その内部で行を繰り返してレンダリングします。

ビューファイル内

    <%= render :partial => 'update', :locals => {:updates => @updates} %>

そして更新部分の内部

    <% updates.each do |update| %>
       RENDER LOGIC
    <% end %>

これが、更新のすべての行の部分的な読み込みオーバーヘッドに悩まされない理由です。お役に立てれば!

于 2013-01-11T18:39:32.563 に答える