我有部分嵌套的内部集合。例如
<= render partial: "users/user", collection: @users, as: :user %>
在_user.html.erb
内部,我正在渲染另一个部分如下:
<%= render partial: "users/user_info", locals: {user: user} %>
它以这种方式工作,但问题是它为每个用户对象呈现_user_info.html.erb
部分,这使得它需要很长时间。我怎么能避免这个?有什么建议吗?
答案 0 :(得分:0)
渲染部分通常需要时间。我想有两种减少渲染时间的方法:
有关Rails中缓存策略的更多信息,请查看:http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching
答案 1 :(得分:0)
你应该使用片段缓存和多次获取片段,这将给你一个显着的提升: https://github.com/n8/multi_fetch_fragments (这个宝石已经是Rails 5的一部分)
答案 2 :(得分:0)
轨道将仅适当地缓存顶级部分。 我的建议是也使用content_for功能将user_info部分移到顶部。 在您的主要布局中:
<%= render partial: "users/user_info", collection: @users, as: :user %>
<%= render partial: "users/user", collection: @users, as: :user %>
在您的“ user_info”部分中:
<% content_for "user_info_#{user.id}" do %>
<!-- your user_info content -->
<% end %>
在“用户”部分中:
<!-- your user content -->
<%= content_for "user_info_#{user.id}"%>
在这种情况下,user_info和用户partials将被正确缓存,并且渲染将花费更少的时间。