<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                關于頁面性能,實在重要,關系到用戶體驗,關系到公司賺錢的大大大事。 記得在剛畢業的時候在第一家公司面試,問了我一個問題作為面試題,就是如何提高頁面訪問速度,當時做了一張圖回答這個問題,剛才找了一下居然找到了,就是下面這個圖 ![](https://box.kancloud.cn/1f88781ae12909c0524148892a4dc321_2420x889.png) 現在這里準備在細化,性能的衡量指標,如何分析,白屏時間,首屏時間等 ## window.performance window.performance是w3c聯合各廠商推出的高精度測量的一套API。通過這套API可以獲取到各個階段加載的情況,如dns查找時間,tcp鏈接的時間,dom加載的一些數據。 隨便打開一個網站,f12,控制臺輸入window.performance即可看到相關的詳細信息![](https://box.kancloud.cn/cd3c5f9d9b7f879294f2355a8f35eb5d_355x526.png) 大致可以用這樣一張圖來表示 ![](https://box.kancloud.cn/fcf1e6a291dccbb8ade627b86b077e3a_912x555.png) 以下是相關屬性: * navigationStart:當前瀏覽器窗口的前一個網頁關閉,發生unload事件時的時間。如果沒有上一個頁面,這個值會和 fetchStart 相同。通常我們也理解為準備加載新頁面的起始時間。 * redirectStart:到當前頁面的重定向開始的時間。當重定向的頁面來自同一個域時這個屬性才會有值,否則值為0。 * redirectEnd:到當前頁面的重定向結束的時間。當重定向的頁面來自同一個域時這個屬性才會有值,否則值為0。 * fetchStart:準備使用HTTP請求(fetch)頁面的時間。 * domainLookupStart:域名查詢開始的時間。 * domainLookupEnd:域名查詢結束的時間。 * connectStart:返回HTTP請求開始向服務器發送的時間,如果使用持久連接(persistent connection),則返回值等同于 fetchStart 的值。 * (secureConnectionStart):可選特性。如果頁面是HTTPS協議,則返回開始SSL握手的那個時間。如果當前網頁不要求安全連接,則返回0。 * connectEnd:返回瀏覽器與服務器之間的連接建立的時間。如果建立的是持久連接,則返回值等同于 fetchStart 屬性的值。連接建立指的是所有握手和認證過程全部結束。 * requestStart:返回瀏覽器向服務器發出HTTP請求時(或開始讀取本地緩存時)的時間。 * responseStart:返回瀏覽器從服務器收到(或從本地緩存讀取)第一個字節時的時間。 * responseEnd:返回瀏覽器從服務器收到(或從本地緩存讀取)最后一個字節時的時間。 * unloadEventStart:返回同一個域名前一個網頁的 unload 事件觸發時的時間。否則返回值為0。 * unloadEventEnd:返回同一個域名前一個網頁的 unload 事件觸發時的時間。否則返回值為0。 * domLoading:返回當前網頁 DOM 結構開始解析時(即Document.readyState屬性變為 loading、相應的readystatechange事件觸發時)的時間 * domInteractive:返回當前網頁DOM結構結束解析、開始加載內嵌資源時(即Document.readyState屬性變為 interactive 、相應的readystatechange事件觸發時)的時間。 * domContentLoadedEventStart:返回當解析器發送 DOMContentLoaded 事件的開始時間 * domContentLoadedEventEnd:返回當文檔的 DOMContentLoaded 事件的結束時間。 * domComplete:返回當前文檔解析完成,即Document.readyState 變為 complete 且相對應的readystatechange 被觸發時的時間。 * loadEventStart:返回該文檔下,load 事件被發送時的時間。如果這個事件還未被發送,它的值將會是0。 * loadEventEnd:返回當 load 事件結束,即加載事件完成時的時間。如果這個事件還未被發送,或者尚未完成,它的值將會是0 利用這套api計算一些關鍵的時間節點: 頁面經歷了多長時間 如下面代碼表示距離瀏覽器開始加載網頁到現在的時間間隔。 ~~~ var timing = performance.timing; var duration = Date.now() - timing.navigationStart; ~~~ 網頁加載整個過程的(onload)耗時 如下面代碼表示網頁加載整個過程的耗時。 ~~~ var timing = performance.timing; var pageLoadTime = timing.loadEventEnd - timing.navigationStart; ~~~ DNS 域名解析的耗時 如下面代碼表示 DNS 域名解析的耗時。 ~~~ var timing = performance.timing; var dns = timing.domainLookupEnd - timing.domainLookupStart; tcp 連接的耗時 ~~~ 如下面代碼表示 DNS 域名解析的耗時。 ~~~ var timing = performance.timing; var tcp = timing.connectEnd - timing.connectStart; ~~~ TTFB 獲取首字節的耗時 如下面代碼表示 TTFB(time to frist byte ) 獲取首字節的耗時。 ~~~ var timing = performance.timing; var ttfb = timing.responseStart - timing.navigationStart; ~~~ ## 性能衡量指標 任何東西,車、電腦都有自己的自己的性能衡量指標例如跑車也有百米加速時間,前端頁面也有自己的衡量指標。 從發起請求到返回到第一個字節,頁面開始展示,首屏加載完成,這三個三個時間點作為主要指標。如下圖所示 ![](https://box.kancloud.cn/67f6e86f75e326f3081c3c176a155885_1002x322.png) ### 白屏時間 白屏時間是發起http請求之后 到頁面開始渲染的這一段時間 白屏時間= 頁面開始展示的時間點 - 開始請求的時間 下面是網上找的資料,講得很清楚 ![](https://box.kancloud.cn/9a043fd07639a2c1b441cae375bbcda4_899x434.png) ![](https://box.kancloud.cn/bdd9a11c82dda40e925c6ccd0bb2414a_1001x504.png) ### 首屏時間 首屏時間,即發起請求到頁面展示出瀏覽器屏幕首屏的內容 首屏時間 = 我們分析頁面模塊到第一屏的時間 - 發起請求的時間 下面這張圖應該能很好的說明: ![](https://box.kancloud.cn/092686f3f960af7b8075a917c986e503_209x510.png) ![](https://box.kancloud.cn/2266658d8bc627a1f8aa00fd500ac2f5_1018x563.png) ### 使用谷歌network便捷的分析 不多說 上圖,是不是感覺很方便。 ![](https://box.kancloud.cn/4695b736f8178e3f6479046cbcda3e4b_1032x463.png) ### 如何優化 現在看來是有一定的紕漏的,但是也概括的差不多了,右鍵圖片打開可查看清晰大圖。 ![](https://box.kancloud.cn/1f88781ae12909c0524148892a4dc321_2420x889.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看