そのプリロード スクリプトを調べたところ、スクリプトは次のイメージに移る前に 1 つのイメージがロードされるのを待たないように見えます。これがブラウザがハングする原因だと思います。基本的に、ブラウザに 100 個の画像を同時にロードするように指示しているのです。
より良い方法は、再帰関数を使用して、最初の画像が完了した後にのみ次の画像の読み込みを開始することです。これは私がまとめた簡単な例です。
編集:これにより、スタック オーバーフロー エラーが発生します。以下の新しいバージョンを参照してください。
var preLoadImages = function(imageList, callback) {
var count = 0;
var loadNext = function(){
var pic = new Image();
pic.onload = function(){
count++;
if(count >= imageList.length){
callback();
}
else{
loadNext();
}
}
pic.src = imageList[count];
}
loadNext();
};
$(document).ready(function(){
var files = ['file1,jpg', 'file2.jpg'];
preLoadImages(files, function(){ alert("Done!"); });
});
繰り返しますが、ここで重要なことは、ブラウザに一度に 1 つの画像のみをダウンロードさせるようにすることです。それ以上だと、すべてが完了するまでブラウザがロックされる危険があります。
--
編集:再帰なしの新しいバージョン。これを 1000 個以上の項目配列でテストしましたが、エラーは発生しませんでした。私の考えは、再帰を間隔とブール値に置き換えることでした。50 ミリ秒ごとに関数をポーリングし、「何かロードしていますか?」と尋ねます。答えが「いいえ」の場合は、先に進み、次の画像を待ち行列に入れます。これは、すべてが完了するまで何度も繰り返されます。
var preLoadImages = function(imageList, callback) {
var count = 0;
var loading = false;
var loadNext = function(){
if(!loading){
loading = true;
count++;
pic = new Image();
pic.onload = function(){
loading = false;
if(count >= imageList.length-1){
clearInterval(loadInterval);
callback();
}
}
pic.src = imageList[count];
}
}
var loadInterval = window.setInterval(loadNext, 50);
};
他の多くのことが行われている完全なWebページで、これがパフォーマンスに関してどのようになるか、私はまだ興味があります. それがどうなるか教えてください。