> 単なるグローバルオブジェクトに格納すれば事足りることではないのかと。
> 格納オブジェクト自体を関数内においてローカル化する例
キャッシュ「だけ」が目的ならばグローバル配列を使用する必要すらない。ローカルな Image オブジェクトは適当なタイミングで GC されるはず(実装依存だが)。
function prefetchImages () {
var I = arguments.length;
var i = 0;
while (i < I) (new Image).src = arguments[i++];
}
prefetchImages ('sample1.png', 'sample2.png', 'sample3.png');
> そうして格納されたと思われる画像ファイルが実際に格納を完了したことを確かめるには
JavaScript 1.3 の Image オブジェクトには、complete というプロパティがある(DOM HTML の HTMLImageElement の仕様に complete アトリビュートは存在しないが、DOM 実装によっては追加されている)。
あるいは、DOM 実装によっては img 要素ノード上での load、progress、readystatechange イベントをサポートしている。
> イメージコレクションへの配列インデックスによるスワップ(実際は連想によるアクセス)
> DOMによるピンポイントでのスワップ
違いがよく分からない。JavaScript 1.3 でもピンポイント指定は可能だし、DOM HTML でも後方互換性のために document.images が残されている(ただし非推奨)。
どちらにせよ、いちいち document からノードを再検索するのは無駄ではある。document.getElementById、document.getElementsByTagName(NS) とて例外ではない。
> 余分な読み込みは極力避け
明示的にバックグラウンドで読み込むならば、XMLHttpRequest を使用するのが無難かもしれない。
いずれにせよ、画集やニュース系でもない限り、img 要素を多用する機会はそうないはず。装飾画像は CSS に回すべきだし、そうすれば CSS 実装の判断で適当にバックグラウンド処理される(たとえば、ロールオーバーなど CSS だけで十分可能)。