Ruby on rails 如何使用表单元素加速rails\u部分的渲染?
我有Ruby on rails 如何使用表单元素加速rails\u部分的渲染?,ruby-on-rails,caching,rendering,Ruby On Rails,Caching,Rendering,我有rails操作,包括以下HAML部分: - @items.each_with_index do |item, i| - item_no = 'item' + item.item_no.to_s .item = form_for item, remote: true, html: { multipart: true, autocomplete: 'off' } do |f| = f.hidden_field :parent_id, :value => @par
rails
操作,包括以下HAML
部分:
- @items.each_with_index do |item, i|
- item_no = 'item' + item.item_no.to_s
.item
= form_for item, remote: true, html: { multipart: true, autocomplete: 'off' } do |f|
= f.hidden_field :parent_id, :value => @parent.id
= f.hidden_field :image, value: item.image
...
...
// 5-6 attributes
- if @parent.has_item_numbers?
.serial-number{ class: ('right' if item.item_no.odd?) }
= item.item_no
与其父项关联的项目数
变化很大,根据用户的不同,项目数可能会增加到2000-3000个。我们对父母可以生的孩子数量没有限制。在我决定限制之前:
,是否有办法加快的渲染速度。每个\u都使用\u index
方法,因为现在在我的本地计算机上完成一个请求需要10秒
有一些关于速度的讨论,但我不完全理解
另外,值得注意的是,同样的部分在
rails 5.0.4
中的性能要好得多,但在rails 5.1.4
中的性能却大大降低了 通常不应在视图中进行迭代。相反,除了允许您实现片段缓存之外,您还应该使用它来执行迭代:
你的看法:
= render @items, parent: @parent
您的部分(即\u item.html.haml
):
每次我打开包含大量集合的视图时,这会将puma服务器完全挂起在本地。还在挖…brb.答案的最后三行应该是
-如果@parent.has\u item\u number?
。现在的时间范围为2.5-3.5秒。现在来看片段缓存:@marvindanig我在render
调用中显式地传入parent
,通常情况下,您的部分最好不要引用@parent
之类的实例变量。您应该显式地注入依赖项。@Marvindaning还注意:您最初是使用索引执行每个任务,但没有使用索引执行任何操作,所以我忽略了这一点。如果您确实需要分部中的索引,它应该作为item\u迭代
提供。我的意思是,在分部中,您通常不应该依赖于设置的@
变量。部分用于代码重用,下次从其他视图渲染该部分时,可能没有@parent
,这可能是因为该视图没有加载该变量,或者因为它在该上下文中的名称与@parent\u item
不同,或者出于其他原因@
变量最好在顶级视图中使用,这样可以将命名的局部变量传递到部分视图中。
- item_no = 'item' + item.item_no.to_s
.item
= form_for item, remote: true, html: { multipart: true, autocomplete: 'off' } do |f|
= f.hidden_field :parent_id, :value => @parent.id
= f.hidden_field :image, value: item.image
...
...
// 5-6 attributes
- if parent.has_item_numbers?
.serial-number{ class: ('right' if item.item_no.odd?) }
= item.item_no