这两个代码示例之间是否存在性能差异?

Tat*_*tat 1 ruby ruby-on-rails

下面的代码似乎做了同样的事情,但是一个有比另一个更好的性能,或者它们是相同的?谢谢.

代码1:

<% @posts.each do |post| -%>  
post.doSomething
<% end -%>
Run Code Online (Sandbox Code Playgroud)

代码2:

<% for post in @posts %>
post.doSomething
<% end -%>
Run Code Online (Sandbox Code Playgroud)

Chu*_*bas 5

广泛采用的方法是使用each.这不仅是由于更多的红宝石十岁上下,但由于在Ruby 1.8.7+ each返回一个枚举对象,它可以用来做魔术很酷的功能的东西.

另外:如有疑问,基准**

require "benchmark"

array = [*1..100_000]

Benchmark.bm(11) do |x|
  x.report("for .. in") { array.each{ |i| i.succ } }
  x.report("each")      { for i in array; i.succ; end }
end
Run Code Online (Sandbox Code Playgroud)

**如果您发现代码中的0.00000001纳秒的性能增益是相关的,那么您可能不应该使用Ruby.