【发布时间】: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