Rails частично занимает слишком много времени для рендеринга

В моих представлениях я делаю частичный. На самом деле это элемент строки, который появляется в таблице примерно 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, чтобы закрепить вещи.! Любой другой подход.?


person Nerve    schedule 11.01.2013    source источник


Ответы (2)


Хотя я не уверен, почему при рендеринге возникает задержка, я настоятельно рекомендую инвертировать порядок: вы отдаете все обновления партиалу, а внутри него выполняете итерацию и рендеринг строк.

Файл просмотра

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

И внутри частичного обновления

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

Вот почему вы не страдаете от частичной загрузки каждой строки в вашем обновлении. Надеюсь это поможет!

person CristianDonosoC    schedule 11.01.2013
comment
Эй, спасибо за это. Я попробовал это, и рендеринг сразу упал примерно на 15–20%. Однако до сих пор не мог понять причину этих нерегулярных шипов. - person Nerve; 11.01.2013
comment
Являются ли ваши результаты результатом среды разработки? Имейте в виду, что в производстве код представлений кэшируется, поэтому, возможно, другое предложение может иметь больше смысла с точки зрения производительности. Попробуйте провести тест в производственной среде, так как именно время рендеринга будет иметь значение в конечном итоге. - person CristianDonosoC; 11.01.2013
comment
Включил конвейерную обработку ассетов, предварительно скомпилировал ассеты и ого, страница тут же взлетела! молниеносно! Спасибо. - person Nerve; 11.01.2013

Частицы очень полезны при рендеринге коллекций. Когда вы передаете коллекцию в партиал с помощью параметра :collection, партиал будет вставлен один раз для каждого члена в коллекции:

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

Для этого также есть сокращение. Предполагая, что @updates представляет собой набор экземпляров обновлений, вы можете просто написать это в index.html.erb, чтобы получить тот же результат:

<%= render @updates %>

Раздел 3.4.5 руководств по Rails объясняет это подробно.

person Syed Aslam    schedule 11.01.2013