Rails特集まとめ(WEB+DB)

第1章 Railsは遅いのか

Railsを早くするコツ
 計測する
 最新バージョンのRailsを使う
 Railsの規約に従った記述をする、Railsの流儀に従う
 データベースへの問い合わせを少なくする、ActiveRecordから発行するSQLを最適化する
 なるべくRubyに処理させない、キャッシュを使う
 高速なサーバを用意する、Uniconを使う

第2章 遅いコードの特定

 Railsログで処理時間を見る
 ActiveRecordのexplain機能を使う
 ruby-profで高度なプロファイリングをする
 New Relicによるパフォーマンスのモニタリング

第3章 Railsキャッシュ機構の活用

 キャッシュストアの記述
  config.action_controller.cache_store = :file, Rails.root.join("tmp/cache/")
 キャッシュストアの種類
  FileStore、デスクにキャッシュ
  Railsのデフォルトのキッシュ
  MemoryStore、メモリにキャッシュ
  キャッシュストアの中で最速
  config.cache_store
 MemCacheStore、memcachedにキャッシュ
   memcahedサーバで一元的に管理
 キャッシュを利用した高速化
  ページキャッシュ、ページ全体
   class RecipeController < ActionController
  caches_page :show
  キャッシュの破棄
expire_page: action => :show, :id => params[:id]
  アクションキャッシュ、アクション単位
   class RecipeController < ActionController
  caches_action :show   
  フラグメントキャッシュ、HTMLの一部
   <% cache do %>
   <% end %>

第4章 ActiveRecordの高速化

 クエリキャッシュ
 デフォルトのクエリキャッシュ
 カウンタキャッシュ
  has_manyが持つ参照の数をキャッシュする
 必要なカラムだけを取得
  class Recipe < ActiveRecord::Base
  belongs_to :user, :counter_cache => true
 必要なカラムだけを取得
  selectリレーションを使って絡むを指定、User.select(:id,:name)
 大量の行データを行データを配列で取得
  mapメソッドではなくpluckメソッドを使う
 大量の行データに対して数えあげ処理をする
  find_in_batchesメソッドを使う
 分割されたデータベースを使う
  sharding(DB分割)してusingメソッドを指定

第5章 HTTPレイヤの高速化

 ブラウザのキャッシュ
  Cahe-ControlはRaislのデフォルト
  現在は大多数のブラウザがHTTP1.1に対応してるのでExpiresでなくCahe-Controlを使う
  ETag
  Last-Modified
   

第6章 uniconサーバの構築

 Unicornサーバ
  Railsサーバ
  1のマスタプロセスとそこからforkした複数のワーカプロセス
  シンプルで時高速なRackサーバ、拡張性が高い
  現在はUnicornがスタンダード
  ApacheやnginxのWebサーバをリバースプロキシとして利用し、
  その下でUnicoceを運用するのが一般的
 nginxのバックエンドとしてUnicornを使う設定
  listen '/tmp/unicorn.sock', :backlog => 1024
 インストール
  gem install unicorn