プリロードと遅延ロード

この記事はもともとリンクだった:https://www.cnblogs.com/yaoyao-sun/p/10367193.html

写真遅延ロードとプリロード

 


プリロード

1.1何を事前にロードされていますか?
あなたがローカルキャッシュから直接レンダリングすることができます表示する必要があるとき負荷絵は、事前にプリインストールされています。なぜプリロードを使うのか?

1.2ページのロードが空白領域を表示さや絵の効果を見ることができます比較的大きなページ画像は、ユーザーエクスペリエンスを向上させるためには、アウトゆっくりとロードされると、する必要が
これらの写真を撮るには、事前にキャッシュ、ユーザーにロードページを開いて、これらの画像はすぐに、より優れたユーザーエクスペリエンスを明らかにします。

1は、CSSの背景にロードされます。全体的なページの読み込み時間を増やします

#予圧-01 {背景:URL(-01.png)非繰り返し-9999px -9999px。} 
#予圧-02 {背景:URL(-02.png)なしリピート-9999px -9999px。}

方法2は、JS新しい画像オブジェクト、SRCロード設定:一般的に使用される新しいイメージ()であり、プリロード実装、およびその後のonloadコールバックメソッドプリロード終了イベントを使用するために、そのSRCを設定します。

コードをコピー
関数プリローダ(){ 
    IF(document.images){ 
        VARのIMG1 =新しいイメージ()。
        VAR IMG2 =新しいイメージ(); 
        VAR IMG3 =新しいイメージ(); 
        img1.src = ";; 
        img2.src =" ;; 
        img3.src =「;; 
    } 
} 
関数addLoadEvent(FUNC){ 
    VAR oldonload = window.onload; 
    (typeof演算window.onload = '関数'!)場合は{ 
        window.onload = FUNC; 
    }他{// onloadイベント中未挂载函数才执行该JS 
        window.onload =関数(){ 
            IF(oldonload){ 
                oldonload(); 
            } 
            FUNC(); 
        } 
    } 
}
addLoadEvent(プリローダー); 
div.appendChild(IMG1); // DOMに挿入
コードをコピー

方法3、Ajaxのプリロード、新しいイメージ()オブジェクトが設定されているSRC

コードをコピー
window.onload =関数(){ 
    setTimeoutメソッド(関数(){ 
        // JSとCSSの要求するXHR 
        のvar XHR =新しいXMLHttpRequestを(); 
        xhr.open( 'GET' URLを;); 
        xhr.send(); 
        XHR =新しいXMLHttpRequestを(); 
        xhr.open( 'GET'、URL;); 
        xhr.send(); 
        //プリロード・イメージ
        の新しいイメージ()SRC =「;;。
    }、1000); 
};
コードをコピー
 
一般的に新しいイメージ()を使用している、プリロード実装、およびその後のonloadコールバックメソッドプリロード終了イベントを使用するために、そのSRCを設定します。
コードをコピー
loadImage機能(URL、コールバック)
{ 
  VARのIMG =新しい新しい画像(); //事前にダウンロードした写真を達成するためにImageオブジェクトを作成
  img.src = URLを、
  IF(img.completeを)
  {//画像をブラウザにすでにある場合キャッシング、ダイレクトコールバック関数
    callback.call(IMG); 
    を返す;直接返す//、onloadイベントに対処する必要はありません
  } 
  img.onload =機能()
  {//フォトダウンロード非同期呼び出しのコールバック関数完成。
    callback.call(IMG); //コールバック関数絵が完全にダウンロードされていないとき、あなただけのimg.widthを使用している場合、このImageオブジェクトに置き換えられます
  }; 
}
コードをコピー

  

テストケース:
機能imgLoaded()
{ 
  アラート(this.width)。
} 
の<input type = "ボタン"値= "loadImage"のonclick = "loadImage( 'aaa.jpg'、imgLoaded)" />
絵のために別の要求がある場合は、ブラウザのキャッシュがすでにこの絵に住んでいて、新しい要求を起動しますが、キャッシュから直接ロード来ることはありません。ので、画像が、将来的には一度ロードされると Firefoxとサファリのために、彼らは、ユーザーに透過的ロード2閲覧、それはまた、画像のonloadイベントが発生しますが、IEとオペラこのIDを無視し、画像のonloadイベントが発生することはありません。
 
またはimgタグのbackground-imageプロパティタグを使用してプリロード画像を実現することができます。しかし、過度の初期ロード・イメージを避けるために、経験に影響を与えます。文書が完了した後リロード(など、window.onloadを使用)をレンダリングするために、一般的に最善です。
 
シーン:
その結果の一つは、背景画像を交換する必要がある場合は、映像が一時的にロードするために行くだろう、それは絵を表示されるようにしばらく時間がかかるだろうが表示され、ユーザーエクスペリエンスが低下するので、画像が事前にロードする必要があります。例えば、写真の壁、シームレスに映像を表示するために必要なもののローリング絵は、それが一時的なリードが画像表示画像が遅すぎるプルするときに表示される次の画像をロードする前に良い写真ではありません。
 
 

遅延読み込み

2.1遅延ロードとは何ですか?
また、遅延ロードとして知られるレイジーローディングは、。あなたが最初に背景画像のimg要素や絵で最初の代わりに、デフォルト(プレースホルダチャート)の他の要素に必要がある場合は、このように、ページを訪問したとき

一度だけの要求に時間をレンダリングするブラウザページ。画像はブラウザの表示可能領域に表示されたら、ちょうど絵の真のパスを設定し、画像が表示されます。

2.2はなぜ絵遅延ロードを使うのか?
ある程度の時間にマルチ画面のページ数、及び画像サイズは、様々なショッピングサイト、ネットワーク、等映像素材として、比較的大きい場合。あなたは時にページをロードした場合
、明らかにサイトの読み込み速度に影響を与えるし、サーバーの負担を増加させるすべての画像をロードし、ユーザーエクスペリエンスが避けられないが、遅延ロードを採用する時間がかかるかもしれません。

原則の2.3遅延ロードコンクリート実現
ページのimg要素は、HTTPリクエストを送信する理由は、src属性を設定するためにそれ以外のブラウザでは、このイメージをダウンロードするための要求を送信しませんです。ページ内のすべての初

プレースホルダプレースホルダを有する図画像が行われ、要素にデータ-SRCのカスタムプロパティを設定し、真のパス記憶された画像は、可動真のパスを使用する必要性を取り出す際

状態はSRCに追加しました。

意味:遅延ロードの主な目的は、圧力を緩和ワンタイム要求または遅延要求の数を減らすために、フロントエンドサーバー、サーバーのフロントエンドとして最適化されます。
 
実装:
 
    1.最初は、純粋な遅延ロードされ、またはのsetTimeoutたsetIntervalローディング遅延を使用します。
 
    2.第2の条件は、一定の条件の対象に、ロードされた、または特定のイベントが非同期のダウンロードを開始したトリガされます。
 
    3.第3の領域がユーザに表示される領域のみをロードし、視覚的な負荷であり、これは主に、スクロールバーを監視することによって実現され、通常、これは、そのユーザーを確保する、ロード時間を開始するためにユーザから離れた一定の距離の前のピクチャを参照ただ絵を下に表示します。
 
写真は、イベントをONERRORますバックトリガーを引きませんでした
 

遅延ロード:デフォルトの画像に割り当てられた画像SRC、再び現実の画像をロードしたとき、ユーザは、画像の表示領域にスクロールバーをスクロール

コードをコピー
<!DOCTYPE HTML> 
<HTML LANG = "EN"> 
<ヘッド> 
    の<meta charsetが= "UTF-8"> 
    <タイトル> Lazyload 2 </ TITLE> 
    <スタイル> 
    IMG { 
        表示:ブロック; 
        マージン下:は50px; 
        高さ:200pxの。
    } 
    </スタイル> 
</ head> 
<body> 
    <IMG SRC = "画像/ loading.gif"データSRC = "画像/ 1.png"> 
    <IMG SRC = "画像/ loading.gif"データSRC = "画像/ 2.png"> 
    <IMG SRC = "画像/ loading.gif"データSRC = "画像/ 3.png"> 
    <IMG SRC = "画像/ loading.gif"データSRC = "画像/ 4 .PNG ">
        return関数(){ 
        VARのCURTIME =新しいDate(); 
        clearTimeout(タイムアウト)。
        IF(CURTIME -のstartTime> =少なくとも){
FN(); IF(画像[I] .getAttribute( 'SRC')=== '画像/ loading.gif'){ startTime = CURTIME。 }他{ =のsetTimeoutタイムアウト(FN、ディレイ); } } } 関数lazyload(){ VAR =フォトdocument.getElementsByTagName( 'IMG'); VARのLEN = images.length; VAR N- = 0; //位置をロードした画像を保存するために、たびから最初のピクチャ横断避ける 復帰機能(){ VAR seeHeight = document.documentElement.clientHeightと、 VAR = document.documentElement.scrollTop scrollTopスプライト|| document.body.scrollTop; (I = N-VARのために、私は< LEN; I ++){ IF(画像[I] .offsetTop <seeHeight scrollTopスプライト+){ 画像[I] = .SRC画像[I] .getAttribute( 'SRC-データ'); } N-N- + = 1。 } } } } VAR LoadImages lazyload =(); LoadImages(); //は、ホーム・ページ画像を初期化します ; window.addEventListener(「スクロール」、スロットル(LoadImages、500、1000)、偽の)
  スロットルの//関数(スロットル)とデバウンス機能(デバウンス)プロセス、
超え//遅延、及び1000ミリ秒に500ミリ秒の間隔1000msでこの関数は、関数がすぐに実行、または関数500ミリ秒の実行を遅延され、トリガされません 。</ SCRIPT> </ BODY> </ HTML>
コードをコピー
 
 

シナリオ推奨リンク

ます。https://www.cnblogs.com/leftJS/p/11079585.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34161083/article/details/93722622