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