今回のリリースの目玉はパフォーマンス改善です。トップページにアクセスしてからチャットが開始できるまでの速度を徹底的に改善しました。アクセスしたけどなかなかチャット画面が表示されず、イライラさせてしまった方には大変ご迷惑をおかけいたしました。
その他はブログ記事のタイトルが表示されるようになりました。
注意)チャットクライアントのプログラムを修正したので、古いキャッシュが残っているとログインできないことがございます。うまくチャットが開始できない場合はブラウザ内のローカルキャッシュをクリアしてからアクセスしなおしてみてください。
以下技術的な話題です。
改善前
DBへの負荷だけ見てもだいぶ改善されていますね。実際にアクセスしたときの体感速度もだいぶ向上したと思います。ちなみにチューニング内容はこんな感じです。
Completed in 485ms (DB: 444) | 302 Found [http://localhost/] Completed in 1608ms (View: 59, DB: 1503) | 200 OK [http://localhost/65556]
Completed in 233ms (View: 4, DB: 57) | 200 OK [http://localhost/top/load_chat_client/65556]
Completed in 663ms (View: 51, DB: 540) | 200 OK [http://localhost/reload_advatise/index/65556]
Completed in 173ms (View: 0, DB: 102) | 200 OK [http://localhost/chart/chat_client/tension/65556]
改善後
Completed in 268ms (DB: 74) | 302 Found [http://localhost/]
Completed in 311ms (View: 82, DB: 72) | 200 OK [http://localhost/69465]
Completed in 463ms (View: 140, DB: 198) | 200 OK [http://localhost/reload_advatise/index/69465]
Completed in 213ms (View: 6, DB: 110) | 200 OK [http://localhost/top/load_chat_client/69465]
Completed in 212ms (View: 0, DB: 28) | 200 OK [http://localhost/chart/chat_client/tension/69465]
- find_by_sqlを使ってプロトタイプしていた個所をActiveReordにSQLの生成をお任せするようにした
- テーブル構造を見直した。モデルの関連等もきちっと定義
- 適切にインデックスを張った。
- 生成されたSQLをEXPLAIN ANALYZEして負荷がかかってる個所を更にチューニング
実は1が結構有効であることは意外でした。今までORマッパーってイロイロ見てきましたが、理想だけで実際にパフォーマンスが問題になるケースが多々ありました。結局SQL書いた方が早いという結論になってORマッパーの導入を諦めた経験が何度もありました。ですが、ActiveRecordが生成するSQLはかなり賢くできていて、逆にこっちの方が早いという結果になりました。以前は1回のSQLの発行回数を少なく抑えて何でもやってしまうというのが定石でしたが、ActiveRecordの場合複数回に分けてSQLを発行しているにもかかわらず1回のSQLのものよりも高速というケースもあり驚きました。
