ここでは、かなり構造化されたアプローチが必要になると思います。
画像の読み込みにかかる時間を決定する要因はたくさんあり、準備が整うとすぐに表示されます。表示する準備ができるまで一部を非表示にしておくこともできますが、それでも一度に大量の画像を読み込んでいるため、時間がかかり、苦痛を伴います。
特定の順序(バックグラウンドファーストなど)でロードする「創造的な」理由があることは明らかです。そのため、スケジュールを立てることで、ロードの振り付けをほぼ行うことができます。
次に、最初のページの読み込みから画像の最初の「波」を除くすべてを削除します。これらはCSSbackground-image
プロパティであるため、これはスタイルシートから削除することを意味します。
background-image
次に、jQueryを使用してスタイルプロパティを設定することにより、後続の各画像セットをロードできます。
$('.foreground').css('background-image', 'url(<path>)');
「シーケンス」を作成するには、前のセットの読み込みが完了したときに画像の各セットの読み込みを開始する必要があります。背景画像の読み込みが完了したことを検出する方法については、こちらで説明しますが、パターンは次のようになります。
var loadNextImageSet = function() {
var imageSet = listOfImageSets.pop();
loadImages(imageSet);
};
$(document).on('images-loaded', function() {
loadNextImageSet();
});
loadNextImageSet();
ここでloadImages()
、画像の読み込みを非同期的に開始し、images-loaded
完了時にカスタムイベントを発生させます。
JavaScriptを使用せずにページを正しく(スムーズではありませんが)ロードしたい場合は、2つのスタイルシートを試してみてください。1つはすべての画像(JS以外のユーザーの場合)、もう1つは最初のウェーブのみのスタイルシート(JSユーザーの場合)です。 )。次に、次のように正しいものが選択されていることを確認できます。
<html>
<head>
...
<noscript>
<link rel="stylesheet" href="full.css">
</noscript>
</head>
<body>
<script>
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = 'background-only.css';
document.head.appendChild(link);
</script>
...
</body>
</html>
JavaScriptを使用する最もクリーンな方法ではありませんが、<script>
スタイルのないコンテンツのフラッシュを避けるために、要素はできるだけ早い段階である必要があります。