« 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.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


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

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