Webパフォーマンスの最適化ガイド

フロントエンドのパフォーマンスの最適化は、各フロントエンドのために不可欠なスキルである、独自のWebサイトを作るために自分のコードを最適化し、ユーザーの待ち時間を減らし、オープンより迅速にアクセスすることができ、今日はいくつかの観点から、フロントエンドのパフォーマンスの最適化ソリューションについて話され、

インタビュアーをお願いし、地図の下に参照してくださいは、多くの場合、何が起こったのか、ページの負荷にURLを入力してから完成するのでしょうか?

 

 

1.ユーザ入力www.baidu.com
2. DNS経由でブラウザ。このURL解析IP
3のIPアドレスとTCPコネクションを確立し、HTTPリクエスト送信
4.サーバーが要求を受信し、ファイルを読み、ライブラリをチェックし、優れたリターンHTTPレスポンスステッチ
5.ブラウザは、最初の画面のHTMLを受けて、レンダリングを開始、
6。 HTML構文解析ビットDOM
7.解析するCSS-ツリーがあるCSS
+ CSS 8.domレンダリングツリーの生成グラフィック
9.スクリプトがJSファイルにロードされた
10実行ファイルのjsを
 
DNSキャッシュ
  DNSは、「ドメインネームシステム」の頭文字であり、その作業は、サーバホストのIPアドレスへのドメイン名とホスト名です。
  DNSのルックアッププロセス:ブラウザのキャッシュ - ローカルのhostsファイル - ローカルDNSリゾルバキャッシュ - ローカルのDNSサーバ - (リピータを設定するかどうか)ローカルDNSサーバの設定 - ルートDNSサーバ

 クライアント側のキャッシュのブラウザのキャッシュ

    メモリキャッシュを必要とせずに、ディスクキャッシュ;

    要求認証がたEtag、最終-Modified304が必要。

    H5新しいのlocalStorage、のsessionStorage。

  キャッシングのより合理的な使用が大幅にフロントエンドのパフォーマンスを向上させることができます。

  ウェブサイトには、どのように解決するために、キャッシュされましたか?
  1.ファイル嘉Haxi
       強い、ファイル名の問題に加えて指紋決済をリフレッシュするために、ユーザが必要とするオンライン後1、
       2. a.hash.jsハッシュが施行され、ファイルの内容は変更されないまま、全体a.jsファイルのMD5値であるハッシュそのままキャッシュ
  キャッシュファイルを解決する方法2
   1. <スクリプトSRC = "/ a.js?_T = XX">タイムスタンプを追加し
   、バージョン番号の<script SRC = "/ a.js?追加2. _V = 1.6"> などJQ、VUE公共図書館、内容が変更されていないがリロード
   3.指紋押捺ではなく、新しいファイル<スクリプトSRC =「/ a.js?発生時間= abcd12saを」> CDNのキャッシュがクリアされますが、新しいファイルを生成し、(その最初にHTML、JS)の問題があるだろうことはできません
   最終4最高の食材ドキュメント<スクリプトSRC =「/ a.abcd12sa.js」の誕生 > HTML WebPACKのビルドにパッケージ最初のjsに、
 
最適化戦略
  1.ロング接続
  2.ファイルのサイズを小さくします   
   1.js圧縮梱包 
      1. [削除]無効な文字を除く削減と最適化のコメント、コードの意味、コード保護
      2.オンラインサイトの圧縮、圧縮JSへのjs HTML圧縮のHTML-minifier、使用uglifyjs2を使用
      2.画像​​圧縮
      1.サイトの使用は、一部の画像が1枚の画像に統合します
      3.css圧縮
     1.削除無効なコード、CSS、セマンティック合併
      2.オンラインサイトの圧縮は、圧縮でHTML、CSSのHTML-minifier、クリーンCSSの圧縮CSSの使用を使用します
   4.html圧縮
     1.圧縮有意義なが、文字はなど、スペース、タブ、改行、コメント、を含む、テキストファイルにHTMLで表示されません。
      、nodejs 2.オンラインサイトの圧縮は、バックエンドのテンプレートレンダリングエンジンの圧縮をHTML-minifierツールを提供しています
   5.ターンGZIP
   6.ファイルのマージ

    1.マージ===>ファイルとNの増加との間に挿入されたアップリンク要求しない場合 - 1つの遅延ネットワーク、より影響を受けたパケット損失は、プロキシサーバを介して切断することができます

    2.合併===>環境設定は、レンダリング時間が長くなる画面場合、失敗のファイルキャッシュの大エリア

    3.公共図書館の合併、異なるページの合併

    4.ファイルのマージのためのオンラインサイト、達成nodejsを使用して、マージファイル

 要求されたドキュメントの数を減らして3
      【図スプライト
      2.js、CSSパッケージ
      3.キャッシュ制御
      4.遅延ロード
 ユーザーとサーバーの距離を減らす4.
  (場所)
       1.cdn jsのキャッシュCDNにプッシュすることができます
 ローカルストレージ
  
 ブラウザのキャッシュメカニズム
  ネットワークの速度と遅いキャッシュ間でコンテンツへのアクセスは、そう、巨大なオーバーヘッド、クライアントとサーバ、処理時間のコンテンツを取得するには、この時間遅延のブラウザとの間に複数のラウンドトリップのために、より大きな対応する必要性を持っていますが、また訪問者のトラフィックのコストを増大させます、再利用キャッシュのパフォーマンスの最適化の前にリソースを得る能力はの重要な側面となっています
  一般キャッシュは4つに分けることができ、我々はhttpcacheに精通しています
      1.Httpキャッシュ
      2.Serviceワーカーキャッシュ
      3.Memoryキャッシュ
      4.Pushキャッシュ

  HTTPキャッシュ
   ブラウザギャングスター:main.jsを取得する必要があり、強い見て、何のキャッシュはありません
      2つの強力キャッシュを制御する1.ExpiresとCache-Controlヘッダー

   2.expires:月、2020年3月16日午前九時50分27秒GMT

   3.last修飾:木、2018年2月15日午後02時17分52秒GMT

  メモリキャッシュ

    そのような共通のデータJSとして、短命キャッシュメモリは、ブラウザにも独自の戦略、BASE64の写真、静的リソースの少量を持っています

  サービスワーカーキャッシュ

    、それはブラウザのウィンドウから外れるは、Javascriptの独立したスレッドメインスレッドで舞台裏で働いて、オフラインキャッシュ、およびその他のネットワークのプロキシを許可します

画像の最適化

  画像の職業は、通常、ほとんどのトラフィック、PCエンド負荷平均画像サイズは文化の異なる種類を使用して、その画像の最適化、異なるシナリオのために、JSファイルパッケージよりもほとんど大きな600K、です
   1. JPG   
    1.圧縮
       2.小​​型サイズ、透明度をサポートしていません。
         背景については3、図回転

  2.png

    1.非圧縮、高品質、透明支持体
       このようなロゴ、商品アイコンとして2豊かなカラーライン、パネル、
   3.svg
    1.テキスト、少量、ベクトル
       2.レンダリングコスト、学習のコスト
   図4スプライトは、httpリクエストの数を減らすために、画像をラベル付け
 
GZIP
  HTTP圧縮プロセスは、HTTPコンテンツの再符号化の目的のために体積を低減することです
  その背後にGzip圧縮の原理は、いくつかの文字列が繰り返しテキストファイル、一時的なファイル全体が小さく、この原理に従って、ファイルの高いレートが繰り返されているコードを発見するので、それらを交換し、圧縮効率に見つけることです高いその逆も基本的に収入、大きい使用gzipとgzipは、そのようなnginxのように、ライブサーバーを行っています
 
ローカルストレージ
   一般的なローカルストレージフォーマットクッキーlocalstroage sessionStroage indexDB
   1.cookie
      第一セットの最初のボリューム。廃棄物の性能は、すべての要求は、現在のすべてのドメイン名を持っています。

    HTTP要求なし状態が、する必要がクッキーではないので、クライアントの状態を維持します

    クッキー生成モード:のSet-Cookie HTTPレスポンスヘッダに、クッキーはdocument.cookieによって読み取ることができるJS

    用途:インタラクティブなブラウザ側とサーバー側のため、クライアントは、独自のデータを格納します

    有効期限:有効期限が切れ

    ストレージの制限:4キロバイトのサイズについてブラウザの店として、あなたが期限切れに有効期限を設定する必要があります

    クッキーの記憶容量はのlocalStorageを交換されます

    HttpOnlyのJSを読み書きすることは許されません

    以下、関連するドメイン名でクッキー---損失を流れCDN。ソリューション:主要駅から分離するためのCDNドメイン名とドメイン名

  2.Webストレージ
      1.ストレージ容量、自動的に送信されませんサーバーは、コントロールをJS
   2.localstroage
     HTML5ブラウザは保存のために特別に設計しました
       約5Mのサイズ
     クライアントの用途では、だけでなく、コミュニケーションやサーバ用
     インタフェースパッケージであることが好ましいです
     ローカルブラウザのキャッシュ・スキーム
   3.sessionStroage
    セッション・レベルのブラウザ店
    約5Mのサイズ
    クライアントの用途では、だけでなく、コミュニケーションやサーバ用
    インタフェースパッケージであることが好ましいです
    標準のフォーム情報のメンテナンスのため
  3.indexDB
      ブラウザ上で実行されている非リレーショナルデータベース
  4.pwa
   アプリケーションモデルベースのキャッシング
     信頼性の高い:なしネットワーク環境は、基本的なページビューを提供することはできません
    高速:ページのレンダリングとネットワークアクセスのためのデータは、より良い最適化を持っています
         合併:アプリケーションは携帯電話のデスクトップに加え、一般的なアプリケーションのフルスクリーンがあるので、その他の特性をプッシュすることができます

塗り替え逆流

   還流 :我々は、DOMは、ジオメトリの変化を引き起こし変更すると、他の要素のDOM要素の幾何学的特性を再計算するためにブラウザが必要で、(幾何学的特性および位置(例えば、幅、高さ、または隠された要素、等の変更要素として)したがって、意志影響を受けた)、その後、このプロセスを引き出すの結果は(も悪化行還流することで計算)
 
   再描画 :我々はDOMスタイルの変化を引き起こすが、それは(色や背景色の変更など)幾何学的特性に影響を与えなかっ変更すると、ブラウザが再計算するために、新しい要素に直接描かれた要素の幾何学的特性を必要としません。スタイル(図還流に示すリンクにスキップ)。このプロセスは、再描画と呼ばれています
 
  このことから、逆流必ずしも再描画につながる、必ずしも再描画するためにつながらないことがわかります
 
  逆流は、最大の影響であります
      1.フォーム、フォントサイズ
      スタイルシートを増やす2.
      3.コンテンツの変更
      4.classプロパティ
      5.offserWidth和offsetHeight
      6.fixed
スロットルと画像安定化
  スロットリング
     以下、実行、実行期間よりも、通話がサイクルを行うだけで、所定の機能
コードをコピー
スロットルがどのくらいのたびに一度実行//機能
        CONSTスロットル=(FUNC、ウェイト= 100)=> {
            関数は100ミリ秒で何回呼び出し、//ませ事項
            lastTime = 0をしましょう。
            リターン(... argsを)=> {
                聞かせて今=新しいDate()。getTime()
                もし(今 -  lastTime>待機){
                    func.apply(this.args)
                    lastTimeは今=
                }
            }
        }

        私は1を=しましょう。
        window.addEventListener( 'スクロール'、スロットル(()=> {
            //遅延ロードイメージを使用します
            console.log(I)
            I + = 1
        }、350)) 
コードをコピー

  

  シェイク
     機能は頻繁にAの実施前に、スペアに十分な時間がある場合にのみトリガされた場合
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
             校验用户是不是重复,用户输入完,向后端发送请求
             如果用户每次输入,都发生请求,造成请求过多
             用户停止输入字符串350毫秒,在发出
         */
 
         const  debounce = (func,wait = 350) =>{
             let  timer =0;
             return  (...args)=>{
                 if (timer) {
                     clearInterval(timer)
                 }
                 timer = setTimeout(() => {
                     func.apply( this ,args)
                 }, wait);
             }
         }
 
         let  i =1;
         window.addEventListener( 'scroll' ,debounce(()=>{
             // 验证
             console.log(i)
             i+=1
         },350))

  レイジーロード

  大幅にいくつかのより多くの写真、長いWebページ、ユーザー負荷のページ表示領域のたびにページを開いた場合は、ページの負荷を開くたびにすべてのWebコンテンツは、ページの読み込み速度は、影響を受けることがバインドされている場合のみ、コンテンツ、意志のために表示領域にWebブラウザに画像が、画像をロードするためにサーバーを要求しますとき、Webブラウジング速度を向上するだけでなく、サーバーの負荷を軽減、我々は、画像の遅延ロードを実装するためにlazyload.jsを使用することができます。

  

コードをコピー
//すべての画像を取得します
        constのIMG = document.getElementsByTagName( 'IMG')
        //表示領域の高さを取得します。
        constのviewHeight = window.innerHeight || document.documentElement.clientHeight;
        // NUMは、その絵に現在の表示を計算するために開始されてから最初のチェック場合の漏れを避けるために毎回使用されています
        NUM = 0ましょう。
        関数lazyload(){
            以下のために(iはNUM =せ; I <img.length; iが++){
                //しかし、高さと面積マイナス表示領域の上端からトップ要素の高さ
                距離= viewHeightみよう - 。IMG [I] .getBoundingClientRect()トップ
                // 如果可视区域高度大于等于元素顶部距离可视区域顶部的高度,说明元素露出
                if(distance >=0) {
                    // 给元素写入真实的src,展示图片
                    img[i].src = img[i].getAttribute('data-src')
                    // 前i张图片已经加载完毕,,下次从第i+1张开始检查是否露出
                    num = i+1
                }
            }
        }
        // 监听scroll
        window.addEventListener('scroll',lazyload,false)
コードをコピー

 

performance.getEntriesByType('navigation')  性能检测

  通过在浏览器控制台输入这个命令,就可以检测到网页加载数据,检测网页加载性能

  

 

 

 

  列入:
      DNS查询耗时 通过使用domainLookupEnd - domainLookupStart  就等于dns查询的时间
      TCP链接耗时  通过 connectEnd - connectStart
      HTTP请求耗时 通过 responseEnd - responseStart 
      解析dom树耗时  通过 domComplete -  domInteractive
      白屏时间 通过 responseStart  - navigationStart
      DOMready时间 通过 domContentLoadedEventEnd - navigationStart
      onload时间 通过 loadEventEnd -  navigationStart 也即是onload回调函数执行的时间
 
Lighthouse插件
Lighthouse分析web应用程序和web页面,收集关于开发人员最佳实践的现代性能指标和见解,让开发人员根据生成的评估页面,来进行网站优化和完善,提高用户体验。
  1.可以在谷歌商店安装一个Lighthouse一个插件就可以了,下面我是检测github网站的数据
  2.使用node全局安装
npm install -g lighthouse

  安装完之后运行,也是找的github网址,运行成功之后,会弹出一个生成的html页面。

 

 生成一个html文件,找到然后直接打开就行

 

 

 

 浏览器渲染

  

  1.在这一步浏览器执行了所有的加载解析逻辑,在解析HTML的过程中发出了页面渲染所需要的各种外部资源请求
  2.浏览器将识别并加载所有的css样式信息与dom树合并,最终胜出页面render树,(:after :brfore这样的伪元素在这个环节被构建到DOM树中)
  3.页面中所有元素相对位置信息,大小等信息均在这一步得到计算
  4.このステップでは、ブラウザのDOMコードは、当社の業績に基づいているに、ページ画素にそれぞれの層、およびすべてのメディアファイルを復号化します
  5.ブラウザの最後のステップは、各レイヤーを統合し、データはCPUのGPUは、最終的に画面に描画するために負け言う(私たちは、実際には最適化アニメーションパフォーマンスするために、この段階でいくつかの圧力をもたらすでしょうコンピューティングの複雑なGPUを見ます時々手動で)個々のビューを区別する
 
  はっきりそれをレンダリング、最初のHTMLに基づいてDOMツリーを構築することである、DOMツリー風雲と組み合わせるCSSOMに加えて、CSSパーサーは、レイアウトにして計算するためのモデル化し、ツリーのレイアウトをレンダリングするレイアウトレンダリングツリー、そして最終的にブラウザがあります画像を描く、我々は最初のページをレンダリングすると完了です。
   
  新しい要素をDOMツリーに追加されるたびにした後、ブラウザが要素に合わせてスタイルを見つけるために、CSSのCSSスタイルシートの検索エンジンを通過する彼を描くために再び要素に適用され、

おすすめ

転載: www.cnblogs.com/adolfmc/p/12065776.html
おすすめ