Web性能優化:What? Why? How?
為什么要提升web性能?
web性能對于用戶體驗有及其重要的影響,根據著名的`2-5-8`原則:
- 當用戶在2秒以內得到響應,會感覺系統的響應非常快
- 當用戶在2-5秒之內得到響應,會感覺系統的響應速度還可以
- 當用戶在5-8秒之內得到響應,會感覺系統的響應非常慢,但還可以接受
- 當用戶在8秒之后都沒有得到響應,會感覺系統糟透了,甚至系統已經掛掉;要么打開競爭對手的網站,要么重新發起第二次請求
凡事都需要研究,通過科學的研究我們就可以找到事物的發展規律。這里要感謝雅虎的工程師總結的14條前端優化法則,使得我們可以站在巨人的肩膀上。《高性能網站建設》這本書中的14條優化原則,總結起來主要是以下個方面的優化:
- 減少HTTP請求
- 頁面內部優化
- 啟用緩存
- 減少下載量
- 網絡連接上的優化
為什么減少HTTP請求可以提高Web性能?
要回答這個問題,我們就要了解當瀏覽器向服務器發送一個http請求知道獲取數據都經歷哪些過程:
開啟一個鏈接(tcp/ip的三次握手過程) -》 發送請求 -》 等待(網絡延遲跟服務器的處理時間)-》 下載數據
我們看一下百度首頁中的http請求在各階段耗費的時間,上面不同的顏色代表下圖中的不同階段
可以看到除了圖片之外,其余大部分http請求的事件花在了建立連接與等待階段。
http協議建立在TIC/IP協議之上,在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接。 簡單來說三次握手就是一個身份確認的過程:
(<第一次握手:主機A發送位碼為syn=1,隨機產生seq number=1234567的數據包到服務器,主機B由SYN=1知道,A要求建立聯機;<)
<晴兒:你是瀟哥哥嗎,我是晴兒
(<第二次握手:主機B收到請求后要確認聯機信息,向A發送ack number=(主機A的seq+1),syn=1,ack=1,隨機產生seq=7654321的包<)
瀟劍:這貨是誰,一簫一劍走江湖,下一句是什么?
(第三次握手:主機A收到后檢查ack number是否正確,即第一次發送的seq number+1,以及位碼ack是否為1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到后確認seq值與ack=1則連接建立成功。)
晴兒:這首詩。。。你真的是瀟哥哥,一蕭一劍走江湖,千古情愁酒一回。。。
瀟劍:晴兒,你真的是晴兒。。。。
(啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪。。。。。。。。。。。。)
言歸正傳,這個過程也是需要消耗時間的,在百度首頁找到一個極端的例子:
而等待的時間通常也大于內容下載的時間,這里同樣找到一個極端例子:
由此我們可以得出結論: 一個http請求絕大多數的時間消耗在了建立連接跟等待的時間,優化的方法是減少http請求。