woshidan's loose leaf

ぼんやり勉強しています

少しだけ動作が速くなるコードの書き方3つ

レコードがあることを条件にしたいとき、findの代わりにexists?を使う

if User.find_by(email: "...")
  # something.todo
end

のとき、findやfind_byではActiveRecordインスタンスが生成されてしまう分遅いので、存在確認をしたいだけなら下記のようにexistsを使うとよいようです。

if User.exists?(email: "...")
  # something.todo
end

speakerdeck.com

多数のレコードを処理するとき、eachではなく、find_in_batchesを使って一度に生成するインスタンス数を制限する

User.all.each do |user|
  # something.todo
end

としたいとき、

User.find_in_batches(of: 100) do |users|
  users.each do |user|
    # something.todo
  end
end

qiita.com

正規表現にマッチするかどうか調べるとき、=~よりmatch?の方が速い

str =~ /regexp/

より

str.match?(/regexp/)

speakerdeck.com