我不确定这是否是Rails特定问题,因此我也将其标记为
ruby.
我通过部分渲染事件记录的集合.但是,我发现不同地呈现部分会导致严重的性能差异.
两个版本都使用完全相同的数据,唯一改变的是用于渲染部分的代码.
为什么heck是一个版本始终比另一个版本快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)
解决方法
例1:
您正在渲染部分x次(取决于事件).
这意味着你正在编译html x次(每次循环运行一次).这很慢
您正在渲染部分x次(取决于事件).
这意味着你正在编译html x次(每次循环运行一次).这很慢
例2:您正在使用一组事件呈现一个部分html编译一次(因为只有一个部分).这很快