Help us understand the problem. What is going on with this article?

Rubyのコードを高速にするためのメモ

More than 3 years have passed since last update.

注意: 指標にはなりますが場合によってはパフォーマンスが異なったり挙動が変わったりコードの可読性にも影響するのでちゃんとパフォーマンスを見ながら、テストしながら書きましょう。

参考

https://github.com/JuanitoFatas/fast-ruby
https://speakerdeck.com/sferik/writing-fast-ruby

メモ

  • Arrayの数を数えるならArray#sizeもしくはArray#lengthEnumerable#countを使うより速い)
  • Arrayの検索にはArray#findもしくはArray#detectArray#select.firstより速い)
  • Arrayのランダム取得にはArray#sampleArray#shuffle.firstより速い)
  • Arrayの最初の要素の取得はArray#[0]Array#firstより速い)
  • Arrayの最後の要素の取得はArray#[-1]Array#lastより速い)
  • Arrayの繰り返しはArray#eachforより速い)
  • Arrayを処理したものをflatするならArray#flat_mapArray#map.flattenより速い)
  • Arrayを逆からeachするならArray#reverse_eachArray#reverse.eachより速い)
  • Enumerableの並び替えはEnumerable#sort_by(単純なEnumerable#sortより速い)
  • mapにはSymbol.to_proc(map(&:to_s))(map { |s| s.to_s }より速い)
  • Procをcallするならyield(引数に&blockをとってcallするより速い)
  • HashのfetchにはHash#[]Hash#fetchより速い)
  • Hashの複製にはHash#[]Hash#dupより速い)
  • Hashのkeyを繰り返し処理するならHash#each_keyHash.keys.eachより速い)
  • Hashに追加するならHash#[]=Hash.merge!は遅いしHash.mergeはもっと遅い)
  • 文字列の結合には'foo' 'bar''foo'+'bar'より速い)
  • 文字列の開始と終端を調べるにはString#start_with?String#end_with?(正規表現の方が遅い)
  • 文字列の正規表現にはString#=~String#matchより速い)
  • 文字列の置き換えにはtr(String#gsubより速い)
  • 文字列の置き換えにはさらにString#[sub_string]=での置き換えが高速
  • attr_accessorがsetter、getterを自分で定義するより速い
  • 範囲に入っているかを調べるならRange#cover?Range.include?は遅い)
  • 定義されてないメソッド呼び出し確認にはrespond_to?begin...rescueで処理させると遅い)
  • メソッドは直接callする(method_missingを使うとすごく遅いし、sendも少し遅い)

他にも高速化の手法を発見したら随時追記していきたいと思います。こういう方法もあるよ等大歓迎です。

sue738
グロービスで働いています
globis
グロービスは 1992 年の創業以来、社会人を対象とした MBA、人材育成の領域で Ed-Tech サービスを提供し、現在は日本 No.1 の実績があります。これらの資産と、さらに IT や AI を活用することで、アジア No.1 を目指しています。
http://www.globis.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした