・バグバグ
複数のタブから動画サイトを開いて見ているという状況を考え落としていたためバグが発生。
いまどき複数タブを開いてサイトを閲覧する方が普通だよねorz
なんで気付かなかったのか。。
具体的にはsessionに動画のIDを入れて画面間で動画データのやりとりをしていたのだけど、
動画再生画面を複数開くとsessionに入っている動画のIDを画面を開くたびに上書きしてしまうので
その後の処理がおかしくなる、というもの。
動画のIDをパラメータとして受け渡しすることで解決した。
・Rails1.2.3→2.0.2化&paginatorもアップグレード
Paginatorをwill_paginateにアップグレードしてさらに2008-06-12 - 福島でRailsを使って仕事を頑張る計画を参考にAjax化した。
参考にしたサイトから変更した点は以下。
respond_toでビューを切り替え、index.rjsを呼んでいるところをrjsを使わずに
アクションの末尾に↓のコードを追加した。
if request.xhr? render :update do |page| page.replace_html "thumbnails", :partial=>"thumbnails", :page => params["page"] end end
こうした理由はファイルの数を増やすとパフォーマンスが劣化するのでそれを避けるため。
・パフォーマンスチューニング
↓の資料を元にパフォチューを実施した。
masuidrive on rails - RailsアプリをチューニングするならNew Relic RPM
Rubyist Magazine - RubyOnRails を使ってみる 【第 10 回】 パフォーマンスチューニング
ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール
- 作者: Steve Souders,スティーブサウダーズ,武舎広幸,福地太郎,武舎るみ
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/04/11
- メディア: 大型本
- 購入: 32人 クリック: 676回
- この商品を含むブログ (126件) を見る
ハイパフォーマンスWebサイトは簡単に実施できる高速化のテクニックが載っているので試しやすくてよいと思う。YSlowを使えばどこをチューニングするべきかも自動で分析してくれるし、超らくちん。
実際に実施した対策は以下
1.無駄なファイルを読み込ませない
<%= javascript_include_tag :defaults %>
↑のように書くとprototype.js, effects.jsなどのjsファイルが読み込まれるが、実際に使っていたものだけを指定するよう変更した。
特にprototype.jsは70KBほどの大きさなのでロード時間に結構影響を与える。
ページ毎に読み込むファイルを細かく制御すべき。
2.sessionは使わないページでは切る
sessionの処理はかなり重いらしい。自分の中では結構意外だった。
sessionを切るときに気をつけなければならないのはsessionを使っている途中でオフにするとそれまでsessionに入っていた変数がすべてクリアされるということ。
つまり、(indexページ)sessionオン→(searchページ)sessionオフ→(マイページ)sessionオンのように遷移するとindexページでsessionに保存した変数はマイページに来たときにはnilになっている。
3.session・renderの処理の高速化
Rubyist Magazine - RubyOnRails を使ってみる 【第 10 回】 パフォーマンスチューニング
を参照。
注:flashは内部でsessionを使っているので、flashを使っているページでsessionを切ってはいけない!
4.データの圧縮、キャッシュの活用
これは.htaccessに↓と書けばいいだけなので楽だなーと思っていたら、どうもうまくいかない。
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript <FileMatch "\.(gif|jpg)$"> ExpiresDefault "access plus 10 years" </FileMatch>
これを配置すると画像やCSSなどのファイルがすべて読み込まれなくなってしまう。なぜだろう。。現在調査中。