こんにちは。正宗です。
今日はURLRequestのキャッシュの話をしたいと思います。
よくURLLoaderクラスなんかでキャッシュをさせない方法としてURLRequestのURLの末尾にランダムな数字を入れるという方法が紹介されています。
こんなやつ
new URLRequest("http://exsample.com/?rnd=" + int(Math.random() * 1000));
バナーとかサイトトラッキングなんかのクエリ発行でもよく使われていますね。
これは、通常キャッシュはURLをそのままファイル名として保存しているため、アクセスする際に毎回末尾にランダムな数字をパラメーターとして与えることで、キャッシュファイルを別々のファイルとして保存させておくことで有効な方法ですが、少しだけ不安が残ります。
それはキャッシュ対策として int(Math.random() * 1000)などの0〜999などの整数値を使用した場合、1000回に1回は同じ数字を生成する可能性があるので、そのときにキャッシュを拾ってきてしまうんじゃないかという不安です。
整数じゃなくてそのままMath.random()とすることも出来ますが、結局同じ数字を生成する可能性をコントロールできていない以上根本的な解決になっていないかもしれません。
URLRequestHeaderでpragma:no-cacheを指定するという方法もありますが、IEなんかでどうもキャッシュしてしまったりで、こちらもなかなか使いづらいものとなっています。
(何より実験でRSSリーダーなんかをチャチャッと作るときとか面倒臭いし…)
そこで僕がいつも使っているキャッシュをさせない方法を紹介したいと思います。
new URLRequest("http://exsample.com/?rnd=" + (new Date).time);
これだと、末尾の数値に1970 年 1 月 1 日 0 時のミリ秒が付加されますので、1000分の一秒以内に2回以上アクセスを行わない限りはキャッシュを読み込まないことになります。
キャッシュさせない方法としてランダムな数字を使うより時間の数値を使う方が有効なのは、結構簡単なことですがあんまり紹介されてないので、よかったら参考にしてみて下さい。