Web前端性能

6.1前端性能示例

性能測試工具:前端

Apache Benchmark(ab)獲得的響應時間僅爲從請求發出開始到接收到HTML的最後一個字節所消耗的所有時間。ab命令行以下:web

ab -c 【併發用戶數】 -n 【發出請求數量】 【被測試頁面的URL】瀏覽器

FireBug:緩存

DOMContentLoaded事件:當初始的 HTML 文檔被徹底加載和解析完成以後,DOMContentLoaded 事件被觸發,而無需等待樣式表、圖像和子框架的完成加載。服務器

onload事件:在頁面和圖片加載完成後加載。網絡

對Web應用前端性能的研究不是爲了準確地獲得一個響應時間數據,實際上,Web性能一部分取決於Web服務器和應用服務器(創建鏈接/下載資源文件),另外一部分取決於瀏覽器的實際機制/Web頁面上的JS文件執行等。取決於web服務和應用服務器的響應時間與服務器的負載和壓力相關;而取決於瀏覽器實現機制與JS文件執行所須要的時間則幾乎與服務器負載和壓力無關。對於後者的研究正是本章所探討的內容要逃的目的不是獲得這部分響應時間的準確數據,而是拖動更好的web應用的前端性能,減小總響應時間。併發

6.2HTTP概要

HTTP用於傳輸WWW方式的數據,該協議採用了請求/響應模型。HTTP協議自己是一種非面向鏈接的協議,每一個HTTP請求之間都是獨立的。框架

6.2.1HTTP協議結構

1.請求報文格式前端性能

請求報文格式以下:函數

 

請求行爲的格式:

Method 【分隔符】Request -URI 【分隔符】HTTP-VersionCRLF

http報文主體包含了HTTP請求的內容。對於GET等方法來講,報文主體爲空;對於POST方法來講,報文主體則包含須要發送給服務器的數據。

2.響應報文的格式

響應報文的格式以下:

響應報文狀態碼:

1XX:信息響應類,表示接受到請求而且繼續處理。

2XX:處理成功響應類,表示動做被成功接收、理解和接受。

3XX:重定向響應,表示完成指定的動做,必須接受進一步處理。

4XX:客戶端錯誤,表示客戶請求包含語法錯誤或不能正確執行。

5XX:服務端錯誤,表示服務器不能正確執行一個正確的請求。

響應頭則給出了服務器自己的一些信息,返回HTML或其餘數據內容包含在報文主體中。

6.2.3與前端性能相關的頭信息

1.Accept-Encoding

Accept-Encoding是瀏覽器發出的請求頭中包含的頭信息域之一,用於告訴服務器所接受的頁面文件的編輯方式,如Accept-Encoding:gzip,deflate就是告訴服務器,瀏覽器可以接受不壓縮和使用gzip兩種方式的頁面內容。頁面壓縮和不壓縮到底可以帶來多大的性能差距?壓縮可以大大提升瀏覽器性能。

⚠️:目前主流瀏覽器都是支持對頁面的gzip壓縮方式的,所以在服務端須要確保返回的頁面在這種狀況下已經進行gzip壓縮。

2.Connection

HTTP協議是一種非面向鏈接的、無狀態的協議。當Connection的值設定爲keep-alive時,瀏覽器與服務器之間約定使用持久鏈接。

3.Expires

HTTP響應數據頭中包含一個Expires域,該域的值用於指示返回數據到期時間。⚠️瀏覽器緩存機制:Expires頭給出的信息就是依據:噹噹前時間小於Expires指定的時間時,瀏覽器從緩存中直接獲取相應的資源文件或HTML文檔;而噹噹前時間大於Expires指定時間時,瀏覽器向服務器發送請求獲取該資源。

6.3瀏覽器打開URL的方式

6.3.1鏈接到URL所在服務器

用戶在地址欄中輸入一個URL,並單擊GO按鈕要求瀏覽器打開該URL後,瀏覽器作的第一件事是尋找該URL所在的服務器。經過向DNS服務器查詢,瀏覽器能夠得到該URL所在網站的IP地址。而後瀏覽器向該地址發起鏈接請求,創建到服務器的鏈接。

6.3.2獲取頁面對應的HTML文檔

當鏈接創建後,瀏覽器向服務器發送HTTP請求,請求URL對應的HTML文檔。無論請求的URL是一個靜態的HTML文件,仍是動態腳本(ASPX、PHP或JSP),服務器返回該瀏覽器的必定是一個HTML文檔。該HTML文檔就是瀏覽器須要呈現的頁面。

6.3.3解析文檔並獲取所須要的資源

瀏覽器在獲取HTML文檔後會對文檔進行解析,目的是知道該頁面須要哪些資源以及生成DOM樹。當DOM樹生成後,DOMContentLoaded事件觸發。

並不是全部元素均可以被並行下載。通常狀況下,頁面包含兩類須要被執行的JS腳本,一類是直接用<script>標籤標示的內嵌JS語句;另外一類是引用的外部JS文件。

6.3.4頁面上的JS文件與CSS文件

對於瀏覽器而言,在處理頁面上的JS文件合格JS代碼時,只須要保證一下兩點:

(1)全部JS代碼按照其在HTML文檔中出現的順序執行,這樣能夠保證JS文件之間存在的依賴關係在執行時不會被破壞。

(2)JS文件在執行時,其依賴的DOM樹已經創建好。

6.3.5onload事件

當HTML文檔解析完成,生成DOM樹,全部頁面須要的資源文件都已經成功下載和執行(對於JS文件)後,瀏覽器會發出onload事件並回調HTML文檔中的onload函數。

6.4提升前端性能的方法

提高前端的性能,有兩大思路:

(1)減小頁面加載所須要的時間

(2)提高用戶觀感,讓用戶以爲頁面更快

6.4.1減小網絡時間

1.使用DNS緩存技術

2.減小須要傳輸文件的尺寸

3.加快文件傳輸速度

6.4.2減小發送的請求數量

1.利用瀏覽器緩存

➢保證服務端返回資源的響應頭帶Expires信息,是的資源能夠被緩存。

➢用引用方式使用樣式表和JS腳本。若是使用內嵌的樣式表和JS腳本,每次HTML文檔的變化都會致使樣式表和JS腳本須要從新加載,沒法充分利用緩存。固然,在沒有緩存或樣式表與JS腳本須要從新加載,用引用方式使用樣式表和JS腳本反而會致使更多的HTTP請求。

➢使用更多的URI能夠被瀏覽器緩存。許多網站使用腳本生成須要返回的圖片或JS資源文件,而該腳本所在的URI又附帶一些常常變換的參數,這致使這些內容沒法被緩存(緩存要求URI嚴格一致)。

2.使用合併的圖片文件

6.4.3提升瀏覽器下載的併發度

1.JS文件放在HTML文檔的後面

2.使用多個域名

6.4.4讓頁面儘早開始顯示

(1)將樣式表的引用放在HTML的頭部(如放在<head>標籤中)

(2)將樣式表的引用放在HTML文檔的最後。

相關文章
相關標籤/搜索