読者です 読者をやめる 読者になる 読者になる

Rails の高速化についてググったり

ruby

 Rails の練習ってことでちまちまとアプリを作ってました。作ってたのはまぁ Twitter と連携するちょっとしたアプリ。しかしどうも、作れば作るほどアプリケーションの遅さが気になってきました。で、ぐぐってみると Rails の高速化テクがいくつもヒットしました。
 いくつかピックアップして紹介します。(Rails 2 系など古い記事も含まれてます)

1. 『Ruby on Rails を高速化する』IBM DeveloperWorks
 N+1 クエリー問題 の解決アプローチです。これは Rails のしくみを使って db へのクエリ回数を減らすテクニックですね。Rails で何も考えずにコーディングするよりもある程度知識をもってコード書くだけでクエリを劇的に減らせるってことがわかります。RDB の遅さを緩和することによる高速化ですね。

2. 『現実の世界の Rails、第 2 回:高度なページ・キャッシング』IBM DeveloperWorks
 Rails アプリの高速化で最も強調される手法はキャッシュです。もはや Rails でアプリ作るならキャッシュが前提です。ところが些細な理由でキャッシュが利用できないシーンがあり、そういうものを JavaScript 使ってカバーしようぜ、というアプローチです。JavaScript をかませることでキャッシュできるページを少しでも増やして高速化をはかる、とう戦略ですね。

3. 『Railsの画面生成を10倍高速化する方法』世界線航跡蔵
 Yugui さんとこですね。このページと、ページ下部にある続きへのリンクを含めて読みましょう。まずはキャッシュしようぜ、っていう戦略は踏むとして、そっからさらに apache フィルタと php の合わせ技を噛ませてレスポンス速度上げてますね。

4. 『Rails アプリを nginx の拡張モジュールで置き換えて高速化する方法』HeartRails Tech Blog
 これは 3. の apache フィルタの代わりに nginx の拡張モジュール使う感じ... でしょうかね。僕まだちゃんと理解していませんけども nginx って最近すごくよく聞く名前です。高速&省メモリなのがウリだそうです。

5. 『Rails2.0の足回りと中級者への道』gihyo.jp
 パフォーマンス測定して Rails の中をカリカリにチューニングしてゆく感じでしょうか。フロントエンドの高速化も含めてまとめてある記事です。3. 4. みたいな一撃必殺ではないですが、さしずめ知識として押さえておくと良いテクニック集ですね。


 と、ここで Web プログラミングについて @naoina さんからリプをいただきました↓。

 ...なるほどチューニングするよりもインフラ側からのアプローチが手軽になってきている、と。例えば↓こういう事例ですね。


6. 『Railsの最適化・スケーリングのシナリオ』Media Technology Labs
 2008 年の記事ですが、記事最後にある「プログラマ1人日が$400-1000に対して、EC2の1台当たりのコストは$900/年ということもあり、「チープ革命チープ革命」としての地位を確立している感じです。」という文言がまさにインフラ側からのアプローチの効果を物語ってますね。


 ... とゆーわけで最近はスケールアウトしましょう、どうスケールアウトするかを考えましょうという雰囲気になってきているのを感じました。
 いっぽう僕は Twitter 連携するアプリ作ってみてたんですけども、Rails 内部の高速化テクを知らなかった上、キャッシュやスケールアウトすらスルーしてました。加えて Twitter API コールがやたらと多いので localhost なのに尋常じゃない遅さに...。途中まで作っておいてアレですけども、一旦作りなおそうかなと思います。ちょっとずつ Web アプリの作りかたが分かってきましたが、チューニングをカリカリやるにしても、やらずにインフラを整えるにしても、知っとくべき知識がたくさんあるんだなーってのを身にしみて感じます。