Rails 2.0・その9(ブラウザのロード時間を短くなったように体感させる)
今の世の中、ビジュアル系(ローリー?)のページが増えました。
1つのページで画像、javascript、スタイルシートファイルをやたらたくさん読み込む場合が多いですが、ブラウザの体感速度をカンタンに上げられます。
ただし、条件があって、同じ画像や javascript やスタイルシートファイルを、複数のサーバに分散させておかなくてはなりません。
さてそれが出来たら準備万端
以下の1行を config/environment.rb のいちばんオケツ(最後)ぐらいに追加します。
そして、Webサーバを再起動します。
そうすると、1つのページの中にある、image_tag, javascript_include_tag, stylesheet_link_tag ファイルでしていされたファイルのドメインを、勝手に以下のどれかに分散して割り振ってくれます。
assets0.example.com
assets1.example.com
assets2.example.com
assets3.example.com
・・・うーん、うーん、いつでも4つのサーバを用意しろということなのでしょうか。
と悩む前に、上記の記述をカスタマイズすることができます。
例えば、4つのサーバではなくて、
assets1.example.com
assets2.example.com
assets3.example.com
という3つのサーバだけでいいのよ、という場合は、
とすればいーよー、てな感じです。
しかし、この分散方法よりかは、ロードバランサーに頼った方がイイと個人的には思います。
なぜかというと、各サーバの負荷のバランスを変えられないからです。(各サーバとも同じ負荷だけ掛かる)
でもコードの書き方に依っては、ロードバランサーっぽく動作させるのも可能でしょうけどね。
さらにさらに、image_tag ファイルは images.example.com からダウンロードしてきて、
javascript_include_tag ファイルは、javascript.example.com からダウンロードしてきて、
その他のファイル(stylesheet_link_tag など)は、stylesheets.example.com からダウンロードしてきたい、という場合は、
ですわね。
【広告】
1つのページで画像、javascript、スタイルシートファイルをやたらたくさん読み込む場合が多いですが、ブラウザの体感速度をカンタンに上げられます。
ただし、条件があって、同じ画像や javascript やスタイルシートファイルを、複数のサーバに分散させておかなくてはなりません。
さてそれが出来たら準備万端
以下の1行を config/environment.rb のいちばんオケツ(最後)ぐらいに追加します。
ActionController::Base.asset_host = "assets%d.example.com"
そして、Webサーバを再起動します。
そうすると、1つのページの中にある、image_tag, javascript_include_tag, stylesheet_link_tag ファイルでしていされたファイルのドメインを、勝手に以下のどれかに分散して割り振ってくれます。
assets0.example.com
assets1.example.com
assets2.example.com
assets3.example.com
・・・うーん、うーん、いつでも4つのサーバを用意しろということなのでしょうか。
と悩む前に、上記の記述をカスタマイズすることができます。
例えば、4つのサーバではなくて、
assets1.example.com
assets2.example.com
assets3.example.com
という3つのサーバだけでいいのよ、という場合は、
ActionController::Base.asset_host = Proc.new { |source| "assets#{rand(3) + 1}.example.com" }
とすればいーよー、てな感じです。
しかし、この分散方法よりかは、ロードバランサーに頼った方がイイと個人的には思います。
なぜかというと、各サーバの負荷のバランスを変えられないからです。(各サーバとも同じ負荷だけ掛かる)
でもコードの書き方に依っては、ロードバランサーっぽく動作させるのも可能でしょうけどね。
さらにさらに、image_tag ファイルは images.example.com からダウンロードしてきて、
javascript_include_tag ファイルは、javascript.example.com からダウンロードしてきて、
その他のファイル(stylesheet_link_tag など)は、stylesheets.example.com からダウンロードしてきたい、という場合は、
ActionController::Base.asset_host = Proc.new { |source|
if source.starts_with?('/images')
"http://images.example.com"
elsif source.starts_with?('/javascripts')
"http://javascripts.example.com"
else
"http://stylesheets.example.com"
end
}
ですわね。
【広告】