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