10/19(土)に開催されたRails勉強会@東京 第88回のレポート記事です。
前回の「Angular.js / Backbone.js + marionette.js 編」に続いて、今回はパフォーマンス・チューニング系の話についての議論を参考にさせていただきつつ、資料をまとめていきます
🎳 実運用中のパフォーマンス監視
NewRelicが一番オススメ。特徴はこちら。
* アプリケーションの監視に最適なツール * アクション => メソッド、sqlが遅いまでチェックできる * アクションをひとつひとつチェック => 定義・構造がおかしいか探す => レンダリングの改善 * サイト全体平均より、重要なページを計測して改善をすべき * js側のチェックも出来る * サーバの監視もできるけどサーバごとに料金がとられるのがツライ
New Relic Nightのまとめ記事
http://www.engineyard.co.jp/blog/2013/new-relic-night/
🤔 モデル側(クエリ) の改善について
モデル側(クエリ) の改善についてのいくつかのアイデアがこちら。
* どのモデルをいくつ読み込んだかをチェックして、最適化 * カラム数は30に絞る => ActiveRecord カラム数が多ければ多いほど遅い * ActiveRecordのオブジェクトをできるだけ作らないようにする * 遅そうなsqlのExplainをとって、最適化
🗽 ビュー側(レンダリング)の改善について
* render_pertialが遅い => modelに移すほうがキャッシュできて最適 => Fat Modelとのトレードオフ
🚌 パフォーマンス・チューニングに活躍してくれそうなツール
Gem: Bullet
N+1クエリ問題、不要なeager loading、counter cacheを使うべきポイントを検出してくれるGem
https://github.com/flyerhzm/bullet
Gem: Rack-mini-profiler
SQLの実行時間やレンダーの時間を測定してくれるGem
アクションごとにクエリの発行回数を集計も集計してくれるそうです。
https://github.com/MiniProfiler/rack-mini-profiler
Gem: rpm_contrib
New Relicのコミュニティが参加して作ったExtraなGemっぽいです
https://github.com/newrelic/rpm_contrib
NewRelic Custom metric
よりNew Relicを使いこなしたい人むけのドキュメント
https://docs.newrelic.com/docs/features/custom-metric-collection
🍮 継続デプロイ、静的解析などのツール
Gem: Altria
Rails製のCIサーバ
https://github.com/r7kamura/altria
Gem: rubocop
静的解析をしてくれるgem
https://github.com/bbatsov/rubocop
Gem: rails_best_practices
Railsのコードの品質をチェックしてくれるGem
https://github.com/railsbp/rails_best_practices
Gem: whitesnake
Jenkinsの設定をサポートしてくれるツール
https://github.com/mrkn/whitesnake
CIサービス: Travis CI、Circle CI
https://travis-ci.org/
https://circleci.com/
サービス: Coveralls
Coverageやコードの静的解析系
https://coveralls.io/
サービス: Code Climate
メソッドの複雑度を定義(A〜Fの6段階)
https://codeclimate.com/
🎃 その他
Thread.currentについて
request単位でキャッシュしたいモノ => Thread.currentに入れ込む
http://d.hatena.ne.jp/gogo_sakura/20120124/1327373997
Gem: migrant
モデルにカラム情報を書くとmigrationファイルに展開
https://github.com/pascalh1011/migrant
Gem: annotate_models
モデル内にカラム名をコメントで追加
https://github.com/ctran/annotate_models
🐯 まとめ
完全に俺得的な記事で見づらいのが申し訳ない限り…
もしまとめ的によりこうしてほしいとか有ればぜひコメントください!
🍣 参考リンク
モデルにテーブルのカラム情報をコメントで追加してくれるannotator