我有一个项目,该视图包含使用本地数据的嵌套部分。由于视图中的渲染太多,因此性能非常低。
这是看起来像这样的结构: 在控制器动作中:
format.html {render 'form'}
在form.html.erb文件中:
<%= render partial: 'template',
locals: {
header: (render partial: 'header'),
body: (render partial: 'form')
}
%>
在_form.html.erb文件中:
<script>
some script...
</script>
<!--Display error messages only after first submit -->
<%= render partial: 'form_errors' %>
<!--Start of form-->
<div class="form_container">
<% @tracker = 1%>
<% @submission.form.modules.each do |module|%>
<%=begin render partial: 'form_modules', locals: {
form: form,
module: module,
}
rescue => e
end %>
<% if some condition %>
module.questions.find_by(id: xx) - 1).times do |rep| %>
<%=begin render partial: 'form_modules', locals: {
form:form,
module: module,
}
rescue => e
end %>
<%end%>
<%elsif some condition %>
<% module.qus.each do |q|
trac = **
end
trac = **
trac.times do |rep| %>
<%=begin render partial: 'form_modules', locals: {
form: form,
module: module, }
rescue => e
end %>
<% end if trac > 0 %>
<%end%>
<%end%>
</div>
在_form_modules.html.erb文件中:
<% if module.name == '***'%>
<%= *** %>
<%else%>
<div id="module_<%= module.id %>" class="row-fluid modules"
data-rep="<%= rep%>"
data-module="<%= module.id%>"
data-normalized="<%= /Normalized curation/i =~ module.op ? true : false%>">
<div class="span12">
<div class="box">
<div class="title">
<i id="icon" class="fa fa-icon"></i>
<div class="caption"><%= module.name%></div>
<div class="caption-helper">(<%= module.id%> v.<%= module.v%>)</div>
<% if /Normalized curation/i =~ module.op and !module.qus.nil? %>
<%# unless /Normalized curation/i =~ module.op and !module.qus.nil? %>
<%# unless /***/ =~ module.op %>
<div class="info">
<%= module.ques.valid_value%>
(xx)
<i class="fa fa-down"></i>
</div>
<% else %>
<% if condition %>
<div class="module"><i class="fa"></i> Add</div>
<%elsif condition %>
<div class="module"><i class="fa fa-trash-o"></i> Remove</div>
<%end%>
<%end%>
</div>
<div class="body">
<div class="row-fluid">
<% unless module.op.blank? %>
<div class="span2" align="right"><span style="font-size: medium">Ops:**;</span></div>
<div class="span10"><%= module.op %></div>
<%end%>
</div>
<%=begin render partial: 'form_qus',
collection: module.qus, as: :qu,
locals: {
form: form,
module: module,
}
rescue => e
end%>
</div>
</div>
</div>
</div>
<%end%>
在_form_qus.html.erb中:
<% if condition %>
<%= render partial: 'value',
locals: {
title: v
} %>
<%end%>
**
然后在_value.html.erb文件中: ***
我的问题是,在渲染页面时,渲染嵌套的部分数千次并且性能非常低需要很长时间。我想删除嵌套的部分并将这些嵌套的部分转换为一个大部分的部分,并且只从顶层渲染一次,这将把数千个渲染切换为1次。如果有任何解决方案用文件路径替换嵌套的部分并呈现文件路径,我不会这样做。非常感谢。