【问题标题】:Rails 4 - rendering views is slow due associationsRails 4 - 由于关联,渲染视图很慢
【发布时间】:2016-05-17 13:03:24
【问题描述】:

我有这个问题:

  @companies = Company.includes(:car, :member).where('companies.status != 3 AND companies.status != 4 AND companies.status != 5').order(sort_column + " " + sort_direction) 

查看次数: all_companies.html.erb:

  <div id="cars_list">
    <%= render :partial => 'companies_list', locals: { companies: @companies } %>
  </div>

_companies_list.html.erb:

<div class="tr">
  <span class="td">ID</span>
  <span class="td">Registration</span>
  ...
</div>
<% companies.each do |company| %>
  <%= form_tag edit_inline_company_path(:id => company.id), :method => "post", :id => "id#{company.id}", :remote => true do %>
    <%= render :partial => 'edit_inline_company', locals: { company: company } %>
  <% end %>
<% end %>

_edit_inline_company.html.erb:

<span class="td">
  <span class="td">
    <%= company.id %>     
  </span>
  <span class="td">
    <%= company.location %>     
  </span>
  <span class="td">
    <%= company.registered_at %>     
  </span>
  ...
  <span class="td">
    <%= company.member.full_name %>     
  </span>
  <span class="td">
    <%= company.car.code %>     
  </span>
  <span class="td">
    <%= company.car.driver %>     
  </span>
  ...
</span>

问题 - 渲染视图需要 1800 毫秒(只有大约 40-50 个项目要显示)。

我在查询中加了.includes(:car, :member)是为了避免N+1的问题(但实际上完全不影响速度)。

经过一些调试,我尝试从_edit_inline_company.html.erb 中删除与不同模型相关的项目:

  <span class="td">
    <%= company.member.full_name %>     
  </span>
  <span class="td">
    <%= company.car.code %>     
  </span>
  <span class="td">
    <%= company.car.driver %>     
  </span>

渲染数据所需的时间大约下降。 700 毫秒,但是,我在输出中也需要这些字段。

如何优化呢?我可能忽略了什么?

提前谢谢你。

编辑:

我尝试按照@brenzy 的建议添加索引,如下所示:

add_index :companies, :car_id, :name => 'car_id_ix'
add_index :companies, :member_id, :name => 'memberr_id_ix'

+ rake db:migrate,但加载时间保持不变,这里没有加速。

【问题讨论】:

  • 尝试从您的代码中删除所有部分并再次检查视图渲染时间。你也能给我们意见吗?每个请求下显示的 ActiveRecord 时间?

标签: html ruby-on-rails ruby


【解决方案1】:

尝试为您的关联建立索引。这是一个可能有用的链接:https://tomafro.net/2009/08/using-indexes-in-rails-index-your-associations

【讨论】:

  • 谢谢@brenzy,我试过了,好像不影响性能。
  • @user984621 - 您正在对 Companies.status 进行搜索,所以我也会尝试将其编入索引...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 1970-01-01
相关资源
最近更新 更多