Web 性能優化

前記

好久都沒有寫博客了,罪過罪過,不能懶不能懶,這次記錄一下web的性能優化方法,說到性能優化,就不得不從當你輸入網址按下回車的那一刻說起

性能分治法

把大問題分成小問題分別處理

按下回車發生了什麼

  1. 當然是先去緩存中看看啦
  2. 緩存沒有,那就先DNS查詢找IP地址
  3. 找到IP地址先建立TCP鏈接
  4. 建立後就可以發送HTTP請求了
  5. 後臺處理,我們等待
  6. 接收HTML文件
  7. DOCTYPE 確定解析的語法
  8. 逐行解析
  9. 有些標籤在不同瀏覽器上顯示
  10. CSS同時下載,解析一個接一個(IE同時4個,谷歌同時6個)
  11. JS並行下載,解析按順序,但是JS執行一定阻塞HTMl渲染
  12. 之後就是構建DOM樹,CSS和JS了

解決方法

1、緩存

DNS查詢後會留下緩存,下次訪問後就會無需查詢,另外設置響應頭Cache-Control,使文件緩存,這樣只要網站文件不更改就可以使用緩存

2、DNS查詢

DNS查詢會耗費時間,所以,我們要優化就要減少DNS查詢,儘量減少域名

3、建立TCP鏈接

每次發送HTTP請求都建立TCP連接的話就太耗費時間了,所以我們可以使用連接複用,只需要在HTTP請求頭加上keep-alive,在HTTP/2.0 甚至可以使用多路複用

4、發送HTTP請求

我們都知道發送請求是會帶上cookie的,所以減少cookie體積可以加快發送速度,另外,瀏覽器是可以同時發送多個請求,但是相同域名發送請求會有限制,所以我們可以增加域名,但是這樣就和第一步的解決方法衝突了,於是我們需要自己來權衡利弊

5、接收響應

設置ETag,這樣只要響應文件未更改,就可以返回一個304表示未更改,使用以前的文件,也可以使用Gzip壓縮文件,降低文件大小,接收到後再解壓文件,這樣可以加快下載速度

6、DOCTYPE

不能寫錯,這是確定渲染語法的,必須要寫

7、CDN加速

使用CDN可以增加同時請求數量,也可以減少cookie體積,因爲沒有cookie。使用CDN可以加速,內容緩存在就近的地方,動態DNS,IP就近返回,內容分佈網絡,請求快

8、CSS放在head,JS放在body最後

之所以把link標籤放擡頭而script放body尾部,是因爲瀏覽器遇到script標籤時,會去下載並執行js腳本,從而導致瀏覽器暫停構建DOM。然而JS腳本需要查詢CSS信息,所以JS腳本還必須等待CSSOM樹構建完纔可以執行。這將相當於CSS阻塞了JS腳本,JS腳本阻塞了DOM樹構建。是這樣子的關聯纔對。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章