12/16  KFアップデートとキャッシュのクリアについて



12/16  KFアップデートとキャッシュのクリアについて

何かと忙しい師走の時期をいかがお過ごしでしょうか?
忙しい、忙しいと口癖のように呟いて忙しい気になってる私です☆

今回はアップデートといってもモンスター戦のフィールドが一つ増えただけだったりするので、別に言わなくてもいいんじゃないかなぁとかぶっちゃけ言われなかったら気づかないレベルだろうなぁとか思ったりしつつも、せっかく増やしたのでネタにせんでどーする! ということでさりげなーく、あくまでさりげなーーーく、ここに記載しておきます。

( ゚∀゚)<KFアップデートしましたよおおおぉっっ!!!


……。
…………。
………………。

さて、高原の涼風のように爽やかで気取らない報告はさて置いて、今日の主題は新しいフィールドを追加しようとして思いの外手間取った「ブラウザのキャッシュ問題」について、です。

当distant snowは昨今のブログ化の波に逆らって自分で一からページを作ってちまちまアップロードして、という形式で運営しているわけなのですが、ホームページに関しては一度アップロードしてしまえば修正することもそう多くはなく、またHTMLファイルは修正すればすぐに反映されるので問題ないといえばないのです。

問題があるのはKeyFightのようなCGIによるコンテンツの中でJavaScriptやらCSSやらたっぷりと使用している場合。
ブラウザにはキャッシュという機能があり、これはダウンロードすればそうそう変更されることのないファイル(画像など)を利用者のパソコンに保存しておくことでページの再表示を高速化しようという技術なのですが、このキャッシュ対象には前述のJavaScriptやCSSファイル、その他にもXMLファイルといった外部ファイルなども含まれています。(厳密言えばほぼすべてのファイルがキャッシュされ一時保存されるんですが)
通常のHTMLファイル内でそれらを使用している場合であれば、メタタグでキャッシュ制御する適当なクエリー文字列を追加するなどの方法が取れるのですが、今回ちょっと手間取ったのはJavaScript内で外部ファイルを読み込んでいるケース。
具体的には「AJAXでXMLHttpRequestによって読み込まれているXMLファイルのキャッシュ制御」でした。
例えば以下の様な状況です。

ajax.js
 function openXML(file,async,funcName){
  var xml = createXMLHttpRequest();
  xml.open("GET","abcd.xml",async);
  xml.send('');
  return xml;
 }

結論から書いてしまえば、このようにJavaScript内でファイル指定している状況であってもクエリー文字による制御が有効で、abcd.xmlabcd.xml?0001にしてしまえば期待通りXMLファイルの再取得が行われました。

私は最初、クエリーによる制御はHTML内でしか出来ないものと思い込んでいてXMLファイルを再取得させるためにあーでもないこーでもないと唸っていました。
JavaScriptから呼び出す外部ファイルにキャッシュなんて概念があるとは思いもしていなかったわけですね。
もうひとつ言えば、xml.open("GET","abcd.xml",async);のファイル指定部分はサーバー内の同階層のローカルファイルを読み込んでいるのだとばっかり思っていて、クエリー文字のように余計な文字列を追加したら読み込みエラーが起きるに決まってらぁ(゚听)  とも思っていました。
実際はURL指定だったのですが。

ちょっと手は焼かされましたがいい勉強になりました。

このようにKeyFightにはわざわざ使わなくてもどうにでもなる技術があちらこちらに使われているわけですが、プレイヤーの皆様におかれましてはこのようなことは一切気にせずどうか末永いお付き合いをよろしくお願いいたします<(_ _)>