1

我的应用程序已经到了必须开始优化性能的地步。我已经发布了一些我认为可以改进的代码。

在视图中,我以某种方式处理索引中的第一项,而以另一种方式处理其余项。每次迭代一个新项目时,都会对其进行检查(Ruby 会问自己......这个项目的索引是否为 0?)

我觉得如果我可以通过特殊处理第一个项目index.first?并以另一种方式处理其他项目(甚至不检查它们的索引是否为零)来阻止这种行为,那么性能可以得到提高。

  <% @links.each_with_index do |link, index| %>
    <% if link.points == 0 then @points = "?" else @points = link.points %>
    <% end %>
    <% if index == 0 then %>
      <h1> First Item </h1>
    <% else %>
      <h1> Everything else </h1>
    <% end %>
  <% end %>
<% end %>
4

1 回答 1

3

您可以像这样非破坏性地执行此操作:

first, *rest = *my_array
# Do something with 'first'
rest.each{ |item| … }

…wherefirst将是第一个元素(或者nil如果 my_array 为空)并且rest将始终是一个数组(可能为空)。

如果可以修改数组,则可以更轻松地获得相同的结果:

# remove the first item from the array and return it
first = my_array.shift
# do something with 'first'
my_array.each{ |item| … }

但是,这只会清理您的代码;它不会产生可衡量的性能差异。

于 2012-04-29T17:25:53.690 回答