画像がブラウザに何らかの方法で読み込まれると、その画像はブラウザのキャッシュに保存され、その画像が現在のページにあるか他のページにあるかに関係なく、次に使用されるときにはるかに高速に読み込まれます。ブラウザのキャッシュから期限切れになる前に使用されます。
したがって、画像をプリキャッシュするには、画像をブラウザにロードするだけです。大量の画像をプリキャッシュする場合は、JavaScriptを使用して行うのが一般的に最適です。これは、JavaScriptから実行した場合、通常、ページの読み込みが妨げられないためです。あなたはこのようにそれを行うことができます:
function preloadImages(array) {
if (!preloadImages.list) {
preloadImages.list = [];
}
var list = preloadImages.list;
for (var i = 0; i < array.length; i++) {
var img = new Image();
img.onload = function() {
var index = list.indexOf(this);
if (index !== -1) {
list.splice(index, 1);
}
}
list.push(img);
img.src = array[i];
}
}
preloadImages(["url1.jpg", "url2.jpg", "url3.jpg"]);
この関数は何度でも呼び出すことができ、毎回、プリキャッシュに画像を追加するだけです。
このようにjavascriptを介して画像がプリロードされると、ブラウザは画像をキャッシュに保存し、他の場所(Webページ内)で通常のURLを参照するだけで、ブラウザはそのURLをキャッシュから取得します。通信網。
最終的には、ブラウザのキャッシュがいっぱいになり、しばらく使用されていない最も古いものが破棄される可能性があります。したがって、最終的には、画像はキャッシュからフラッシュされますが、しばらくの間そこにとどまる必要があります(キャッシュの大きさや他のブラウジングの量によって異なります)。画像が実際に再度プリロードされるか、Webページで使用されるたびに、ブラウザキャッシュ内の画像の位置が自動的に更新されるため、画像がキャッシュからフラッシュされる可能性は低くなります。
ブラウザのキャッシュはクロスページであるため、ブラウザに読み込まれたすべてのページで機能します。したがって、サイトの1つの場所でプリキャッシュを行うと、ブラウザのキャッシュがサイトの他のすべてのページで機能します。
上記のようにプリキャッシングする場合、画像は非同期で読み込まれるため、ページの読み込みや表示が妨げられることはありません。ただし、ページに独自の画像が多数ある場合、これらのプリキャッシュ画像は、帯域幅やページに表示されている画像との接続をめぐって競合する可能性があります。通常、これは目立った問題ではありませんが、接続速度が遅い場合、このプリキャッシングによってメインページの読み込みが遅くなる可能性があります。プリロード画像が最後にロードされても問題がない場合は、他のすべてのページリソースがすでにロードされるまで、プリロードの開始を待機するバージョンの関数を使用できます。
function preloadImages(array, waitForOtherResources, timeout) {
var loaded = false, list = preloadImages.list, imgs = array.slice(0), t = timeout || 15*1000, timer;
if (!preloadImages.list) {
preloadImages.list = [];
}
if (!waitForOtherResources || document.readyState === 'complete') {
loadNow();
} else {
window.addEventListener("load", function() {
clearTimeout(timer);
loadNow();
});
timer = setTimeout(loadNow, t);
}
function loadNow() {
if (!loaded) {
loaded = true;
for (var i = 0; i < imgs.length; i++) {
var img = new Image();
img.onload = img.onerror = img.onabort = function() {
var index = list.indexOf(this);
if (index !== -1) {
list.splice(index, 1);
}
}
list.push(img);
img.src = imgs[i];
}
}
}
}
preloadImages(["url1.jpg", "url2.jpg", "url3.jpg"], true);
preloadImages(["url99.jpg", "url98.jpg"], true);