我的应用程序正在达到我必须开始优化性能的程度。我发布了一些我认为可以改进的代码。
在视图中,我以某种方式处理索引中的第一个项目,而另一个方式处理其余项目。每次迭代一个新项目时,都会检查它(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 %>
答案 0 :(得分:3)
你可以非破坏性地这样做:
first, *rest = *my_array
# Do something with 'first'
rest.each{ |item| … }
...其中first
将是第一个元素(如果my_array为空,则为nil
),rest
将始终为数组(可能为空)。
如果可以修改数组,则可以更轻松地获得相同的结果:
# remove the first item from the array and return it
first = my_array.shift
# do something with 'first'
my_array.each{ |item| … }
但是,这只会清理您的代码;它不会产生可测量的性能差异。