転載します。https://blog.csdn.net/idongchen/article/details/81145279
フロントエンドのパフォーマンスの最適化Lazyload
Lazyloadはじめに
まず、アイデアの実現
セカンドを、コードがあり
、その後、最適化、3
Lazyloadプロファイル
フロントエンドの仕事、インタフェースおよび効果は、同時により多くの怒っプルクールになっても、パフォーマンスの問題を言及する必要があります。コンテンツが豊富でいくつかのプロジェクト、長いページ、画像、。モールページのように。同期がロードされている場合は使い捨てローディングが、それはロードターンの人が〜崩壊、花がなくなるまで待機することは確かです。今日はLazyload共有技術のロード技術の遅れです。トラフィックを保存し、ダンス、サーバー上の緩和圧力に近づいて、ページの読み込み速度は、ユーザーエクスペリエンスを強化しましょう。
まず、アイデアの実現に
長いページでは、画面の表示可能領域を制限しました。
IMG SRC属性値は同じ図を参照するタグページまたはプレースホルダを設定されていません。
「データ・URL」:画像の実際のアドレスなどのカスタム属性imgタグは、あります。
スクロールを聞く、あなたは、動的URLは、実際の「データのURLを」置換する場所までスクロールします。
第二に、コード
のHTML部分(簡易概略下部構造
<!DOCTYPE HTML> <HTML> <HEAD> <メタ文字コード= "UTF-8"> <タイトル> Lazyload </ TITLE> <スタイルタイプ= "テキスト/ cssの"> .mobラップ李{ リストスタイル:なし;幅:100%;高さ:345px;} </スタイル> </ head> <body> <UL クラス = "MOB-ラップ"> <LI」> <IMGクラス= "タンプ、IMG" ALT = "装填"データ-SRC = "のhttp:// mob.com/public/images/index/sharesdk-logo.jpg"><p>ShareSDK轻松实现社会化功能</ P> </ LI> <LI"> <IMGクラス= "タンプ-IMG" ALT = "読み込み"データ-SRC = "のhttp://mob.com/public/images/index/sms-logo.jpg "> <P> SMSコードSDK </ P> </ LI> <LI" > <IMGクラス= "IMG-TAMP" Altキー= "装填" = SRC-データ「HTTP:// mob.com/public/images/index/rec-logo.jpg"><p>MobLinkシームレスにリンクするWebおよびアプリケーション</ p型> </ LI> </ UL> </ BODY> </ HTML>
プロセス簡単に
スタート - 「スクロールイベントを聞く - 」<scrollTopスプライトそのトップの高さから? - 「データのURLを置き換えるURL - 」エンド
- JSの一部
VAR AIMG = [ { "SRC": "http://mob.com/public/images/index/sharesdk-logo.jpg"、 "TXT": "ShareSDK容易社会機能"}、 { "SRC": "http://mob.com/public/images/index/sms-logo.jpg","txt": "SMSコードSDK"}、 { "SRC":「http://mob.com/public/画像/インデックス/ REC-logo.jpg "" TXT ":" MobLink アプリケーションとWebがシームレスにリンク" } ]; VAR SLI = '' ; 文献 .getElementsByClassName(" MOB-ラップ「)[0] .innerHTML = "" ; のために(私は=せ0; I <10; I ++ ){ SLI =のdocument.createElement( "李" )。 SLI .innerHTML = `<IMGのクラス= "タンプ、IMG" ALT = "装填" SRC = "./ zwt.gif"データSRCは= "$ {aImg [I%3] .SRC}"> <P> $ {aImg [I%3]。 TXT} </ P> `。 文書 .getElementsByClassName( "暴徒ラップ")[0]。appendChild(SLI)。 }。 窓 .onscroll = 関数(){ VAR bodyScrollHeight = document.documentElement.scrollTop。// ボディ滚动高度 VAR windowHeight = window.innerHeight。// 视窗高度 VAR IMGS = document.getElementsByClassName( 'タンプ-IMG' ); ため(VAR ; I <imgs.length; iが0 = I ++ ){ VAR imgHeight = IMGS [I] .offsetTop。 もし(imgHeight <windowHeight + bodyScrollHeight - 340 ){ IMGS [I] .SRC = IMGS [I] .getAttribute( 'データ-SRC' )。 IMGS [I] .className = IMGS [I] .className.replace( 'タンプ、IMG'、 '' )。 } } }。
0.0とても急いで呼び出されます~~~いつも悪い、見ていただきありがとうございます
第三に、再最適化
任意の処理なしには、必然的に直接監視につながるとき、あまりにも頻繁にトリガーハンドラマウスホイールをスクロールします。
あなたが遅いページ変更カードで、その結果、操作の多数を引き起こし、業績動向、DOMや他の処理機能の多くを消費しているために起こる、場合
、あるいは応答しないブラウザがクラッシュします。
この問題に対処するためのアイデアは、スロットルと画像安定化にあります。
コーヒーのうち、ボタン、ピックコーヒー、プレス:機能スロットル概念は非常に鮮やかなメタファーを持って
いないことで、数回に相当ボタンを数回受けたか、コーヒーのカップを押して、その後、後で作品。
従来のスロットリングは、ここで言っているのではない、以下に説明が少なくともたびに機能を絞るには、少なくとも一度実行されます。
// 节流函数 _throttle =(FN、遅延、最小)=> { VARタイムアウト= ヌル、 のstartTime = 新しい 日付(); FN(); リターン 機能(){ VAR CURTIME = 新しい 日付(); clearTimeout(タイムアウト)。 もし(CURTIME -のstartTime> = 以上){ FN()。 startTime = CURTIME。 } 他{ タイムアウト =のsetTimeout(FN、遅延)。 } } }
スロットル機能の使用
機能比較(){ VAR bodyScrollHeight = document.documentElement.scrollTop; // ボディローリング高 コンソール。ログイン(bodyScrollHeight + "SRC代替方法" ) VAR windowHeight = window.innerHeight; // ウィンドウの高さ のvar IMGS = document.getElementsByClassName(「TAMP -IMG ' ); のため(VAR I = 0、I <imgs.length; I ++ ){ VAR imgHeight IMGS = [I] .offsetTop; // 上から像高 IF(imgHeight <windowHeight bodyScrollHeight + - 340 ){ IMGS [ I] .SRC IMGS = [I] .getAttribute( 'SRC-データ' )。 IMGS [I] .className = IMGS [I] .className.replace( 'タンプ、IMG'、 '' )。 } } } ウィンドウ .onscroll = _throttle(比較、350600)。
スクロール時間least
長い600よりも、コールは、比較、または350msの実行を遅らせます。
このような直接onscrollパフォーマンスの相対は、さらに問題なく機能して、強化します。
さまざまなビジネス・シナリオと少なくとも遅延が可能調整します。