« jQueryスバラシス | Main | Ajaxと戻るボタン・ブックマーク »

Friday, August 18, 2006

AjaxとIf-Modified-Since

Ajaxをやって最初にはまるのは,やっぱりキャッシュ問題.
IEでは,同じURLに対してリクエストすると,必ずキャッシュが返ってきてしまう.

サーバ上の特定のコンテンツを,更新があるかチェックしようとすると,時刻とかをURLの末尾に付けて,URLをユニークにしてあげる必要がある.
でも,そうしてしまうと,常に毎回コンテンツ全体を読み込んでしまって効率が悪い.

AjaxでもIf-Modified-Sinceが効けば良いんだけど,効かないようなので自前でやるしかなし.

調べてみると,すでに同じ事をやっている方がいた.
[Ajax tips] XMLHttpRequest と If-Modified-Since

prototype.jsのラッパも公開していたけど,これはファイルが無くなっている模様.

というわけで,記事の方を参考にさせてもらいつつ,jquery.js にパッチを当てた.
ただ,コンテンツ自体をキャッシュするとメモリを消費するので,その辺は変更して,コンテンツのキャッシュはしないようにしてみた.

また,IE,Operaは素直に動くのだけど,Firefoxはブラウザ側でキャッシュをしてくれるようで,サーバが304を帰しても,JavaScriptの方にはキャッシュされたコンテンツを200ステータスで返す模様.
記事の方は常に本体を返す形だから問題なかったんだろうけど,こちらのは変更なしならそれを知りたい.
そこで,Last-Modified時刻を比較して,判定するようにして回避.(完璧ではないけれど)

更新なしを知りたいのは,更新があったときだけ,highlight fade とかで目立たせたり,変更内容に関する処理を実行したい場合がありそうだったから.

で,パッチをMLになげてみたら,数時間でSVNにマージされた.早っ.
MLを見ていると,作者のJohnさん一人でかなりがんばっている模様.
それにしても対応が早い...

改良のペースが速いので,今後が楽しみ.

新Ajaxルーチンのデモは以下の場所に.
jqueryの最新のSVN版を使ってます.

http://pepper.sherry.jp/jquery/newajaxfunc.html

prototype.jsとかは,この辺は標準装備されていないので,標準装備したjquery.jsはちょっと有利?かも?

|

« jQueryスバラシス | Main | Ajaxと戻るボタン・ブックマーク »

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/33589/11486841

Listed below are links to weblogs that reference AjaxとIf-Modified-Since:

« jQueryスバラシス | Main | Ajaxと戻るボタン・ブックマーク »