瀏覽器相關(guān)流程及優(yōu)化

組成

瀏覽器

渲染引擎:

Trident, Gecko, Presto, Webkit, Blink

流程

  1. **DNS解析(迭代查詢)
優(yōu)化:
  • 減少dns請求
  • dns預(yù)解析
  • httpdns防劫持
  • dns負(fù)載均衡**
DNS
  1. 瀏覽器以一個隨機(jī)端口進(jìn)入到網(wǎng)卡,進(jìn)入TCP/IP協(xié)議棧,然后可能經(jīng)過防火墻過濾,
  2. **建立TCP鏈接:
優(yōu)化:

用https/http2**


tcp
  • 第一次握手:客戶端A將標(biāo)志位SYN置為1,隨機(jī)產(chǎn)生一個值為seq=J(J的取值范圍為=1234567)的數(shù)據(jù)包到服務(wù)器,客戶端A進(jìn)入SYN_SENT狀態(tài),等待服務(wù)端B確認(rèn);
  • 第二次握手:服務(wù)端B收到數(shù)據(jù)包后由標(biāo)志位SYN=1知道客戶端A請求建立連接,服務(wù)端B將標(biāo)志位SYN和ACK都置為1,ack=J+1,隨機(jī)產(chǎn)生一個值seq=K,并將該數(shù)據(jù)包發(fā)送給客戶端A以確認(rèn)連接請求,服務(wù)端B進(jìn)入SYN_RCVD狀態(tài)。
  • 第三次握手:客戶端A收到確認(rèn)后,檢查ack是否為J+1,ACK是否為1,如果正確則將標(biāo)志位ACK置為1,ack=K+1,并將該數(shù)據(jù)包發(fā)送給服務(wù)端B,服務(wù)端B檢查ack是否為K+1,ACK是否為1,如果正確則連接建立成功,客戶端A和服務(wù)端B進(jìn)入ESTABLISHED狀態(tài),完成三次握手,隨后客戶端A與服務(wù)端B之間可以開始傳輸數(shù)據(jù)了


    tcp
  1. 發(fā)送HTTP請求(****GET 或者 POST 等,不常用的還有 PUT DELETE 、****HEAD****、****OPTION****以及 TRACE ):靜態(tài)資源緩存,can,服務(wù)器負(fù)載均衡,服務(wù)器緩存,
  2. 服務(wù)器給瀏覽器響應(yīng)一個****301****永久重定向響應(yīng)
  3. 瀏覽器跟蹤重定向地址
  4. 服務(wù)器處理請求:nginx->應(yīng)用服務(wù)器
  5. 服務(wù)器返回一個http響應(yīng)
  6. 客戶端渲染:jscss位置,減少體積

渲染流程

  1. 加載HTML內(nèi)容,處理HTML標(biāo)記,構(gòu)建DOM樹
  2. 加載css,處理css標(biāo)記,構(gòu)建CSSOM樹
  3. 將DOM和CSSOM合并成一個渲染樹
  4. Layout:CPU根據(jù)渲染樹來布局,計算及節(jié)點(diǎn)幾何信息
  5. Paint:GPU根據(jù)每個Layer位置繪制點(diǎn),以渲染層緩存
  6. Composition:處理多層渲染層Layers之間的關(guān)系,合成一個頁面
    其中:
  7. CSS 被視為阻塞渲染的資源,這意味著瀏覽器將不會渲染任何已處理的內(nèi)容,直至 CSSOM 構(gòu)建完畢。存在阻塞的 CSS 資源時,瀏覽器會延遲 JavaScript 的執(zhí)行和 DOM 構(gòu)建。
  8. 當(dāng)瀏覽器遇到一個 script 標(biāo)記時,DOM 構(gòu)建將暫停,直至腳本完成執(zhí)行

css優(yōu)化:

  1. <link href="print.css" rel="stylesheet" media="print">設(shè)置了媒體類型,會加載但不會阻塞

js優(yōu)化:

  1. async 與 defer 屬性對于 inline-script 都是無效的
  2. defer 屬性:載入 JavaScript 文件時不阻塞 HTML 的解析,執(zhí)行階段被放到 HTML 標(biāo)簽解析完成之后。
  3. async屬性:表示異步執(zhí)行引入的 JavaScript,如果已經(jīng)加載好,就會開始執(zhí)行,加載的 JavaScript 依然會阻塞 load 事件。多個 async-script 的執(zhí)行順序是不確定的
  4. 使用 document.createElement 創(chuàng)建的 script 默認(rèn)是異步async的

dns優(yōu)化

  1. 減少 DNS 請求
  2. 縮短 DNS 解析路徑
  3. dns預(yù)解析 dns-prefetch
  4. localDns:緩存挾持,轉(zhuǎn)發(fā)
  5. HttpDns:
    客戶端直接訪問HttpDNS接口,獲取業(yè)務(wù)在域名配置管理系統(tǒng)上配置的訪問延遲最優(yōu)的IP??蛻舳讼颢@取到的IP后就向直接往此IP發(fā)送業(yè)務(wù)協(xié)議請求。

CDN功能:

  1. 調(diào)度分配主機(jī);負(fù)載均衡,根據(jù) IP,網(wǎng)絡(luò)流量情況分配最靠近,網(wǎng)絡(luò)最通暢的 CDN 節(jié)點(diǎn)實現(xiàn)加速
  2. 反向代理
  3. 靜態(tài)緩存;緩存靜態(tài)資源(html,圖片,音樂,視頻等)
  4. 防止 DDOS 攻擊
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 你知道失去力量的感覺嗎? 那是一種從神經(jīng)開始被摧毀,毀滅得粉碎。 那是你看一個人卻沒有想說話的欲望,也沒有走掉的力...
    精彩的代價閱讀 255評論 0 0
  • 我一直強(qiáng)行把一些東西送給你 我的時間 我的愛 我的胡攪蠻纏 我的猙獰和可愛 我從沒問過你想不想要 我只知道這些別人...
    哀慕熙榮閱讀 252評論 0 1
  • 00 中午出門前,聽室友說:擺渡人評分很低的。 那又怎樣? 為了彌補(bǔ)沒有看《從你的全世界路過》的遺憾, 為了易先生...
    潔夢龔閱讀 850評論 0 0

友情鏈接更多精彩內(nèi)容