遅いと思ったときに原因を調べない奴は何をやってもダメ
昨日は遅いと思ったからといってすぐ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倍速っすよ。