rails5アップデートでサイトパフォーマンスは向上するのか。
2014年ごろにrails4で作られたウェブサイトを rails5.2 までアップデートしてみました。
環境は少し特殊でmysqlとmongoの両方を用いています。
Rails version 4.1.4
Ruby version 2.3.4
RubyGems version 2.6.13
Rack version 1.5.5
----- databases -----
mongoid version 4.0.2
Active Record version 4.1.4
Rails version 5.2.0
Ruby version 2.3.4
RubyGems version 2.6.13
Rack version 2.0.5
----- databases -----
mongoid version 6.4.1
Active Record version 5.2.0
テストサーバー情報
サーバはAWSを用います。
こちらからペネトレーションテスト(侵入テスト)を行う事を事前にAWSに申請しないと怒られますので申請を忘れずに。
https://aws.amazon.com/jp/security/penetration-testing/
スペック | vCPU | メモリ(GiB) | SSD ストレージ(GB) | 専用 EBS 帯域幅 (Mbps) |
---|---|---|---|---|
m4.large | 2 | 8 | EBS のみ | 450 |
rails4環境rails5環境のどちらもこのインスタンスで実験を行います。
構成はnginx unicornで動作しております。
速度検証 Apache Bench編
Apatche BenchについてはこちらのQiita記事をご参考にどうぞ
https://qiita.com/flexfirm/items/ac5a2f53cfa933a37192
今回は以下の設定でチェックします。
ab -n 1000 -c 100
Rails4環境
合計時間:92.265 seconds
最速 中央値 最大
接続時間: 28 75 673
処理時間: 561 8958 10915
待ち時間: 332 8929 10879
合計時間: 666 9041 10947
Rails5環境
合計時間:123.780 seconds
最速 中央値 最大
接続時間: 28 35 651 # 53%の高速化
処理時間: 525 12154 13493 # 35%の低速化
待ち時間: 514 12140 13483 # 35%の低速化
合計時間: 658 12194 13525 # 26%の低速化
検証結果パフォーマンスが25.4%落ちた
rack mini profilerで原因を探る
まずはSQL発行数と実行時間、Rails5になってから11クエリ減少したが、実行時間が45ms伸びてしまっている。
Rails4環境:43クエリ(70ms)
Rails5環境:32クエリ(115.6ms)
renderしているものが確実に増えた。
ブラウザキャッシュの影響も多少はあると思いますが、明らかに読み込んでいるファイルが増えました。
低速化の影響はview側のrenderの影響が強いと思われます。