Writing Fast Rubyというスライドが良い

ちょっとしたコードの書き方でパフォーマンスが変わることがあります。リーダビリティを重視する向きからすれば小手先のテクニックに映るかも知れないのですが、リーダビリティを維持しながらちゃんとしたパフォーマンスを出すためにも、テクニックを知ることは大事なことだと思うのです。

結構違うもんですなー

というわけで、そんなテクニックをまとめたスライドがWriting Fast Ruby。見ていて参考になったのでメモ。

たとえば引数に&blockをとってcallするよりも、yieldの方が5倍速い、とか、

def slow(&block)
  block.call
end

def fast
  yield
end

mapにブロックを渡すよりも、シンボルを渡す方が20%速い、とか

(1..100).map {|i| i.to_s}
(1..100).map(&:to_s)

mapしてからflattenを呼び出すよりも、flat_mapを使ったほうが4.5倍速い、とか

enum.map do 
  # do something
end.flatten(1)

enum.flat_map do 
  # do something
end

Hash#mergeよりも、Hash#merge!の方が3倍速い、とか

enum.inject({}) do |h, e|
  h.merge(e => e)
end

enum.inject({}) do |h, e|
  h.merge!(e => e)
end

そういう例がいくつも載っているのです。思うに、Rubyはインスタンスを作るコストが大きいのかな。塵も積もれば山となるって感じですね。ぜひご参考に。