Web性能優化:What? Why? How?

mx64 9年前發布 | 15K 次閱讀 Web性能 前端技術

為什么要提升web性能?

web性能對于用戶體驗有及其重要的影響,根據著名的`2-5-8`原則:

  • 當用戶在2秒以內得到響應,會感覺系統的響應非常快
  • 當用戶在2-5秒之內得到響應,會感覺系統的響應速度還可以
  • 當用戶在5-8秒之內得到響應,會感覺系統的響應非常慢,但還可以接受
  • 當用戶在8秒之后都沒有得到響應,會感覺系統糟透了,甚至系統已經掛掉;要么打開競爭對手的網站,要么重新發起第二次請求

凡事都需要研究,通過科學的研究我們就可以找到事物的發展規律。這里要感謝雅虎的工程師總結的14條前端優化法則,使得我們可以站在巨人的肩膀上。《高性能網站建設》這本書中的14條優化原則,總結起來主要是以下個方面的優化:

  1. 減少HTTP請求
  2. 頁面內部優化
  3. 啟用緩存
  4. 減少下載量
  5. 網絡連接上的優化

為什么減少HTTP請求可以提高Web性能?

要回答這個問題,我們就要了解當瀏覽器向服務器發送一個http請求知道獲取數據都經歷哪些過程:

開啟一個鏈接(tcp/ip的三次握手過程) -》 發送請求 -》 等待(網絡延遲跟服務器的處理時間)-》 下載數據

我們看一下百度首頁中的http請求在各階段耗費的時間,上面不同的顏色代表下圖中的不同階段

Web性能優化:What? Why? How?

可以看到除了圖片之外,其余大部分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則連接建立成功。)

晴兒:這首詩。。。你真的是瀟哥哥,一蕭一劍走江湖,千古情愁酒一回。。。

瀟劍:晴兒,你真的是晴兒。。。。

(啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪。。。。。。。。。。。。)

言歸正傳,這個過程也是需要消耗時間的,在百度首頁找到一個極端的例子:

Web性能優化:What? Why? How?

而等待的時間通常也大于內容下載的時間,這里同樣找到一個極端例子:

Web性能優化:What? Why? How?

由此我們可以得出結論: 一個http請求絕大多數的時間消耗在了建立連接跟等待的時間,優化的方法是減少http請求。

 本文由用戶 mx64 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!