mmag

ハマったことメモなど

遅いと思ったときに原因を調べない奴は何をやってもダメ

昨日は遅いと思ったからといってすぐspawnするのはダメとか言っていたけど、もう少し前にやることがあるだろうがオイ、という話。

前々回のエントリで、

こんな遅かったっけ?と思いながらおもむろにspawn

と書いた。「こんな遅かったっけ?」と思ったのにその原因を考えなかったのがそもそもの誤り、諸悪の根源。

気づいてしまった

昨日のエントリではユーザ100人に加えてマイクロポスト300個つくりました。そのとき、ユーザはあんなに遅かったのに300個のマイクロポストは爆速で生成されたのですよ。普通に考えればあんなに遅いわけがないのに、「よっしゃ並行処理や」と言ってspawn、spawn。ハー。もう、ね。

遅い原因と対策

なんでユーザの生成に時間がかかるのかというと、ユーザのパスワードをhashするためにcomeoninというライブラリを使っていて、そのbcrypt_log_roundsという設定がデフォルトのままだったのでした。この項目は4から31の数値を設定するところで、デフォルトは14。大きい数値にすればセキュリティ面は強くなりますが、その分時間を食うと。config/test.exsでは4にしていて、それで満足してしまったのでした。

ということで、config/dev.exs

config :comeonin, :bcrypt_log_rounds, 4

を追記。

# before
$ time mix ecto.setup
mix ecto.setup  39.33s user 1.06s system 283% cpu 14.272 total

# after
$ time mix ecto.setup
mix ecto.setup  2.02s user 0.83s system 103% cpu 2.749 total

なんだいこいつぁ、3秒かかってねえっすよ。5倍速っすよ。