6月 02 2008
読了: ハイパフォーマンス Webサイト
ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール
Webサイトの高速化をするための14のルールを提示した本。 主にWebサーバのレスポンスの方法、レンダリングの概要のあたりに関係した手法が紹介されている。JavaScript の高速化などには触れていないので注意。
基本的には「リクエスト数を減らしましょう」「通信量を減らしましょう」「レンダリング回数を減らしましょう」 という話。Webアプリ作ってる人はやるやらないはともかく存在を把握しておくのがいいのでは。
自分のRailsアプリである程度実行に移してみる。
簡単だったのは 「ルール3 Expires ヘッダを設定する」 および 「ルール13 ETag の設定を変更する」。
すべて mongrel でやっていたところを、静的ファイルは apache で返すようにして、その部分でmod_expires による Expires ヘッダの設定をする。
ETag に関しては “FileETag None” を全体に設定。
「ルール4: コンポーネントをgzipする」。 Apache で返すものに関しては mod_deflate でいいとして、rails で返すものは(用意されてないので?)やや面倒。
Rails 1.2.x で動くものとしては、 [http://blog.craz8.com/articles/2005/12/17/rails-outputcompressionfilter] や [http://craz8.com/svn/trunk/plugins/output_compression/] がある。2.x に関しては必要になったら調べる。
また、StyleSheet は先、JavaScript は後、というルールを適用。基本的にはlayoutを変更して終わりだったが整合性を取るのがやや面倒なので最初からそうしておくようにしたい。
最後に JavaScript や CSS のファイル数を減らす、というのをやる。こいつは Rails なら task 作っておくのがよさそう。あるいは production と development で読み込むファイルを変えて、 capistrano の task で後処理をするのでもよい。
Rakeでやるならこんなのを lib/tasks に置いたり。
extjs = %w|
public/javascripts/ext/jquery-1.2.3.min.js
public/javascripts/ext/foo.js
public/javascripts/ext/bar.js
|
task :extjs => "public/javascripts/ext/all.min.js"
file "public/javascripts/ext/all.min.js" => extjs do |t|
sh "cat #{t.prerequisites} | ruby script/jsmin.rb > #{t.name}"
end
この例ではついでに JSMIN で縮小化してる。
そんな感じで軽くしたりしたけど、広告が重いままで最終的にはあまり変わらなかったりして。トホー。
あとは ajax でもってくる/レンダリングする部分をやっぱり軽くするってところの方が、 ajax なアプリでは重要ですねー。
