【问题标题】:Rails render partial in a loopRails 在循环中渲染部分内容
【发布时间】:2015-04-15 22:58:00
【问题描述】:

我是 Rails 新手,我正在尝试在循环中渲染部分内容。

这里,books 是一个预先加载到控制器中的数组。

 books.each do |book|
   <%= render 'books/book', :book => book %>
 end

这很好用。但是当书籍数组真的很大时,视图完全加载需要时间。有没有其他有效的方法可以实现同样的效果?我也尝试过使用部分集合(like here),但即便如此,books 的加载时间也没有太大区别。任何建议将不胜感激。谢谢。

【问题讨论】:

  • 发布部分内容。性能问题很可能是由部分内部的东西引起的。

标签: ruby-on-rails ruby-on-rails-2 partials ruby-1.8


【解决方案1】:

由于每次迭代都会打开/关闭部分文件,因此在循环中渲染部分文件会消耗太多时间。而不是部分尝试为此目的使用您自己的助手。

【讨论】:

    【解决方案2】:

    如果您有要在同一个视图中显示的值列表,那么您可以在同一个视图中迭代这些值,而不是每次都渲染一个新的部分。如果不是这种情况,那么最好将值从控制器传递到您的视图。希望对您有所帮助。

    【讨论】:

    • 渲染一个普通的部分,特别是如果你传递一个collection,通常会增加几毫秒的开销。这不是问题(或者没有人会使用部分)。
    【解决方案3】:

    如何在视图顶部使用“proc”,然后在循环中调用它。

    <% book_proc = proc do |book| %>
      #your html call
      <% nil %><%# return nil to prevent print out in last string %>
    <% end %>
    
    <% books.each do |book| %>
      <%= book_proc.call(book) %>
    <% end %>
    

    【讨论】:

      【解决方案4】:

      您写道您是 ruby​​/rails 的新手,所以您是否尝试过使用 分页 解决您的性能问题?

      分页会将您的列表分成多个部分,例如20 本书,并在您的桌子底部设置了一个分页器。

      【讨论】:

        【解决方案5】:

        我最近参与了一个项目,在该项目中我需要渲染一个包含大约 1000 行的表格,但我显然遇到了性能问题。

        当无法应用分页(由于要求)并且需要速度时,帮助程序是解决方案(正如 Dima Melnik 已经回答的那样)。

        为了证明我所说的,我提供了 Ben Scofield 制作的性能测试的链接: http://viget.com/extend/helpers-vs-partials-a-performance-question

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-17
          • 2017-01-31
          • 2014-05-31
          • 1970-01-01
          • 1970-01-01
          • 2015-11-28
          • 2023-03-13
          相关资源
          最近更新 更多