2012-04-29 29 views
1

我的應用程序正在達到一個點,我必須開始優化性能。我已經發布了一些我認爲可以改進的代碼。Ruby的「首先和休息」邏輯

在視圖中,我以某種方式處理索引中的第一項,其他項以另一種方式處理。每次迭代一個新項目時,它都會被檢查(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

我在考慮一旦渲染了第一個項目,然後遍歷索引的其餘部分,就會'彈出'第一個項目的策略?有沒有人看到這樣做的更有效的方式? – Dru

+0

這就是我該怎麼做......但我嚴重懷疑這是一個問題。它可能不是很漂亮的代碼,但是對渲染時間沒有任何影響。 –

+7

請不要假設代碼的性能,而不運行實際的基準測試來證明它實際上很慢。 –

回答

3

你可以這樣做非破壞性,像這樣:

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

...其中first將是第一個元素(或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| … } 

然而,這隻會清理你的代碼;它不會帶來可衡量的性能差異。