2006年11月10日

Ajax?文字化け対策とブラウザキャッシュ対策

■ 2009/01/17追記

ブラウザキャッシュに関してはこちらのサイトをご覧ください。
IEでAjaxリクエストをキャッシュさせない方法
http://www.phppro.jp/news/312
この記事なんかよりずっと適切です。
まー、これは腹立てた勢いで書いた記事(汗)なのに検索ほか結構見に来る方があり、これはイカンと・・・。
かなり放置して今更ですが、ちゃんとしたサイト紹介しますねー。
もし、もっと適切でいいサイトOR情報あるよって方はコメントでも頂ければ幸いです。

あー、そうそう。下部のコメントも見てください。
CLさまからリンクがあります。上のリンクはそちらから頂いてます。

---

最近はウェブデザイナーさんの口からも Ajax という言葉が、当たり前のように出てきます。ま、それに関係してと言うか、色々思うこともあり、Ajax に関係する事でもちょろっとUPしよかなーっと思った次第w

・ ブラウザのキャッシュを回避する方法
・ 文字化けを回避する方法




Ajax というか非同期通信に限らず、変更した内容が反映されない事がありますが、それは単にブラウザのキャッシュ(つまり古いデータ)が読み込まれるためで、簡単な回避策があります。

URL 後ろのパラメータクエリに毎回違う値をくっつける。だけ。
http://www.hogezou.com/hogeru.cgi?hoge=*

*にランダムな値や現在時間なんかですね。パラメータ名はサーバ側(この場合は cgi)に影響がなければなんでもいいです。
これだけで、一致するキャッシュがないためにちゃんと読みに行きます。

んで、文字化けはエンコード、デコードをするだけ。
つまりクライアント --> サーバなら、Javascript で escape してやる。んでサーバでデコードする。と。

追記:
いかんいかん。これじゃあまりに不親切ですね。
参考サイトにリンク貼っときます。
PHPとJavaScriptのURIエンコードを比較(JavaScript++かも日記)
ここには色々お世話になってます。

うーん。なんだかなぁ。
もし、良かったら色々思った理由でも聞いてやってください。という事でつらつらと・・・

昨日、外部のウェブデザイナーさんと打合せをしたんですが、GoogleMaps や表計算で Ajax を教えて?w頂きました。
ま、社内的な事情でプログラマって事は伏せてたんですが、やっぱ一般の認識には疑問を感じることが多いすねぇ。

端的に言ってしまうと Javascript = Ajax 汗・・・。
というか、違いは認識してるけど、非同期通信を使う事の利点や必要性が分かってなかったりする。

それ、通信必要なの? クライアントサイドの script だけでいーじゃん?なんてのは当たり前、ページ遷移のない結果表示がすでに Ajax だとおもってらっしゃる事も ^^;

ちょっとイジメてみよかな。なんてイタズラ心が起きたんで「ウチもバリバリ Ajax 使ってますよ。」なんて言ったら、上の2つの問題が出てきたんですよ。コレがまた。びっくりなことに。

あげく掌を返して Javascript の不備?をつっつきなさる。そりゃね。色々問題も抱えてるよ。確かに。
んでも、無かったらブログなんて成り立たねーじゃん。てか、自慢げに Ajax 談義始めたのは、誰なんじゃー。っと思った訳です。はい。

てな具合w
ま、ここまでご立派な方は初めてですがw

posted by HiFa at 09:29 | 🌁 | Comment(5) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする
>>> スパムコメントは消してますよん。 お互い無駄な労力は避けましょう。 <<<

この記事へのコメント

http://blog.dtpwiki.jp/dtp/2007/02/ieajaxie_aa84.html
で書きましたとおり、ブラウザによっては通信をキャッシュしたものを破棄しませんので、どんどんキャッシュディレクトリに溜まっていくことになります。

よって、CGI側でローカルキャッシュのコントロールのヘッダを入れてやる必要があると考えますが、その点に関してはいかがでしょうか。
Posted by CL at 2007年09月10日 13:47
ご指摘ありがとうございます。全くその通りだと思います。

キャッシュさせない方法としては・・・。

参考:http://tech.bayashi.net/pdmemo/browsercache.html

その他、htaccess を用いる事もできます。
http://w3g.jp/others/htaccess/cache_control

php の場合ですと php.ini を設定してやるのもラクです。
http://jp.php.net/manual/ja/ini.php

また、サーバソフト自体で制御する事も可能です。

ただし、上の参考URLにある通り、キャッシュ制御がうまく行かない事もあります。

HDリソースの浪費に関しては、キャッシュ容量が規定されているため、大した弊害ではないと思っていますがどうでしょう?
※ 調査した訳でなく、思ってるだけですがw
Posted by Hifa at 2007年09月11日 00:51
>ただし、上の参考URLにある通り、キャッシュ制御がうまく行かない事もあります。

キャッシュさせない設定については、実際に設定を入れてみてキャッシュされていないか確認することが大事ですね。

>HDリソースの浪費に関しては、キャッシュ容量が規定されているため、大した弊害ではないと思っていますがどうでしょう?

確かにキャッシュ容量が制限されているわけですが、キャッシュ容量がAjax通信のキャッシュで埋め尽くされてしまっても本来のキャッシュの意味をなさないとも思います。それよりも、通信させちゃいけない内容を通信させちゃう実装が多いですから、そもそもそんな内容通信させないようにするべきなのでしょうが、プログラムでもキャッシュに残らないように意識するのがいいと思いました。
Posted by CL at 2007年09月11日 10:27
>キャッシュさせない設定については、実際に設定を入れてみてキャッシュされていないか確認することが大事ですね。

テストと確認は大事な事ですが、テストと実際の稼働では事なると考えておいた方が良いかと思います。

キャッシュしているのはあなたのパソコンだけとは限らない^^;
それが全て確認できる環境での運用ならば問題ありません。が・・・

getで。
そうでなければ、更新データが必須である場合、URLによる対策も必須と考えた方が無難ですか。
Posted by Hifa at 2007年09月22日 10:19
お久しぶりです。

あれから実際に本稼働させたシステムがあるのですが、getに毎回違うクエリーを付ける方法と、ヘッダによるキャッシュコントロールの記述を併用する形に落ち着きました。

ユーザがキャッシュを覗いたりした場合、当方からのキャッシュに埋め尽くされていることで苦情が来ないようにするためにそうしました。運用後の対応がより楽になるようにする工夫だと思っています。
Posted by CL at 2007年11月18日 19:43
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/27148814
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。