分佈式架構 網絡傳輸優化

分佈式架構 網絡傳輸優化


本文主要講解,瀏覽器請求過程及網絡傳輸等優化手段

優化之前首先了解其調用過程,如下圖:
01
流程分析

  • 通過URL請求到服務器,瀏覽器就要知道這個url對應的ip是什麼?只有知道了ip地址,瀏覽器才能準備把請求發送到指定服務器的具體ip和端口上去。瀏覽器的DNS解析器負責把url解析爲正確的ip地址,這個解析很花時間,而且這個解析時間段,瀏覽器不能從服務器那裏下載任何東西。瀏覽器和操作系統提供了DNS解析緩存支持

  • 獲取IP之後,瀏覽器會請求與服務器連接,TCP經過3次握手後建立連接通道

  • 瀏覽器真實發送http請求,發送請求報文(請求行:包含請求方法、URI、HTTP版本信息,請求首部字段,請求內容實體,空行)

  • 通用首部字段(請求報文與響應報文都會使用的首部字段)
    Date:創建報文時間
    Connection:連接的管理
    Cache-Control:緩存的控制
    Transfer-Encoding:報文主體的傳輸編碼方式

  • 請求首部字段(請求報文會使用的首部字段)
    Host:請求資源所在服務器
    Accept:可處理的媒體類型
    Accept-Charset:可接收的字符集
    Accept-Encoding:可接受的內容編碼
    Accept-Language:可接受的自然語言

  • 網絡開始傳輸請求到服務器,這個會包含很多時間,如網絡阻塞時間、網絡延遲時間、真正傳輸內容時間等

  • web服務器接收到請求,會根據url上下文轉交給相應web應用進行處理

  • web應用會經過很多處理,如 filter、aop前置處理、IOC處理、處理尋找對象和創建,進行業務處理後生成Response對象,熟悉spring對此過程更清晰

  • 返回HTTP響應報文(狀態行:包含HTTP版本、狀態碼、狀態碼的原因短語,響應首部字段,響應內容實體,空行)

  • 響應首部字段(響應報文會使用的首部字段)
    Accept-Ranges:可接受的字節範圍
    Location:令客戶端重新定向到的URI
    Server:HTTP服務器的安裝信息

  • 實體首部字段(請求報文與響應報文的的實體部分使用的首部字段)
    Allow:資源可支持的HTTP方法
    Content-Type:實體主類的類型
    Content-Encoding:實體主體適用的編碼方式
    Content-Language:實體主體的自然語言
    Content-Length:實體主體的的字節數
    Content-Range:實體主體的位置範圍,一般用於發出部分請求時使用

  • 通過網絡傳輸應答內容回到前端瀏覽器,先返回html代碼,不包含圖片、外部腳本、css等

  • 瀏覽器解析頁面,進行渲染和繪製過程
    1.裝載和解析html文檔,構建DOM,如果在解析過程中發現需要其它資源,如圖片,瀏覽器會發出請求獲取資源
    2.裝載和解析css,構建cssom
    3.根據DOM和cssom構建渲染樹
    4.然後對渲染樹節點進行佈局處理,確認其屏幕位置
    5.渲染好的節點繪製到界面上,渲染引擎不會等到所有html都解析完後才創建佈局渲染樹,並行處理解析渲染樹同時向後端請求資源

重繪:頁面渲染到後面發現需要修改前面已經繪製元素的外觀,如背景色、文字顏色。需要重繪這個元素

迴流:頁面渲染到後面發現需要修改前面已經繪製好的元素某些行爲,引起頁面上某些元素佔位面積、定位方式、邊距的變化,會引起周圍或者整個頁面重新渲染

針對以上第三點之後,可以進行特定的網絡優化

優化思路:

  • 儘量利用瀏覽器緩存,優化到極致能不傳輸最好不傳
  • 儘量減少需要傳輸的內容數據量
  • 儘量最短距離訪問,比如使用客戶端最近CDN
  • 儘量優化網絡鏈路

詳細描述

  • 使用瀏覽器本身緩存,儘量減少來回傳輸數據量
  • 精簡代碼,移除不必要的字符以減少其大小
  • 靜態文件,如JS/CSS,進行混淆壓縮,如jsmin、YUIcompressor、CSScompressor
  • 優先考慮使用CSS來代替,其次纔是圖片裁剪,如果條件允許,選擇有損壓縮格式,如jpg
    針對大圖片,儘量進行精簡,在圖片效果和大小之間仔細斟酌
  • 壓縮請求傳輸內容,前後端交互文章中有詳細實例說明,使用壓縮 如Gzip 後再傳輸給客戶端,客戶端接收後由瀏覽器進行解壓,稍微會佔取客戶端和服務器的CPU,但是會顯著提高寬帶利用率,特別是純文本,相當明顯
  • 減少cookie傳遞,http規範中描述,每個客戶端最多保持300個,每個域名下最多20個,其大小基本保持4K左右,如需傳輸控制其傳輸大小

總結

web調用過程分爲很多階段、不同階段處理方式不同,其過程鏈路複雜甚長,瞭解過程後可對其中特定點進行優化,本文主要特定闡述網絡傳輸的優化方式,週期甚短,優化過後效果顯著。

作者簡介:張程 技術研究

更多文章請關注微信公衆號:zachary分解獅 (frankly0423)
05

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