国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

輸入 url 到頁面展現的短短幾秒內瀏覽器究竟做了什么?

dackel / 1192人閱讀

摘要:在上述過程再細化為瀏覽器搜索自己的緩存。至此,瀏覽器已經得到了域名對應的地址。具體過程如下在中這一過程如下首先是字節流,經過解碼之后是字符流,然后通過詞法分析器會被解釋成詞語,之后經過語法分析器構建成節點,最后這些節點被組建成一棵樹。

面試的時候,我們經常會被問從在瀏覽器地址欄中輸入 url 到頁面展現的短短幾秒內瀏覽器究竟做了什么?那么瀏覽器到底做了啥?

瀏覽器的多進程架構
一個好的程序常常被劃分為幾個相互獨立又彼此配合的模塊,瀏覽器也是如此,以 Chrome 為例,它由多個進程組成,每個進程都有自己核心的職責,它們相互配合完成瀏覽器的整體功能,每個進程中又包含多個線程,一個進程內的多個線程也會協同工作,配合完成所在進程的職責。

具體說來,Chrome 的主要進程及其職責如下: 
Browser Process: 負責包括地址欄,書簽欄,前進后退按鈕等部分的工作; 負責處理瀏覽器的一些不可見的底層操作,比如網絡請求和文件訪問; 
Renderer Process: 負責一個 tab 內關于網頁呈現的所有事情 
Plugin Process: 負責控制一個網頁用到的所有插件,如 flash 
GPU Process 負責處理 GPU 相關的任務

我們知道瀏覽器 Tab 外的工作主要由 Browser Process 掌控,
Browser Process 又對這些工作進一步劃分,使用不同線程進行處理: 
UI thread : 控制瀏覽器上的按鈕及輸入框; 
network thread: 處理網絡請求,從網上獲取數據; 
storage thread: 控制文件等的訪問;

當我們輸入url,瀏覽器開始工作

所以 network thread 會執行 DNS 查詢,隨后為請求建立 TCP 連接。

在上述過程再細化為

瀏覽器搜索自己的 DNS 緩存。

在瀏覽器緩存中沒找到,就在操作系統緩存中查找,這一步中也會查找本機的 hosts 看看有沒有對應的域名映射。(所謂的改hosts的原理!!!)

在系統中也沒有的話,就到你的路由器來查找,因為路由器一般也會有自己的 DNS 緩存。

若沒有,則操作系統將域名發送至 本地域名服務器——遞歸查詢方式,本地域名服務器 查詢自己的 DNS緩存,查找成功則返回結果,否則,采用迭代查詢方式。本地域名服務器一般都是你的網絡接入服務器商提供,比如中國電信,中國移動。

本地域名服務器 將得到的 IP 地址返回給操作系統,同時自己也將 IP 地址緩存起來。

操作系統將 IP 地址返回給瀏覽器,同時自己也將 IP 地址緩存起來,以備下次別的用戶查詢時,可以直接返回結果,加快網絡訪問。

至此,瀏覽器已經得到了域名對應的 IP 地址。開始建立 TCP 連接,進行三次握手

三次握手的步驟:(抽象派)

客戶端:hello,你是server么?
服務端:hello,我是server,你是client么
客戶端:yes,我是client

經過一系列檢查和數據請求,確認數據以及渲染進程都可用了, Browser Process(進程) 會給 Renderer Process(進程) 發送消息,頁面加載和渲染過程開始。

渲染步驟大致可以分為以下幾步:

解析HTML,構建 DOM 樹

解析 CSS ,生成 CSS 規則樹

合并 DOM 樹和 CSS 規則,生成 render 樹

布局 render 樹( Layout / reflow ),負責各元素尺寸、位置的計算

繪制 render 樹( paint ),繪制頁面像素信息

瀏覽器會將各層的信息發送給 GPU,GPU 會將各層合成( composite ),顯示在屏幕上

構造 DOM 樹

瀏覽器在解析html文件時, 是WebKit 中的 HTML 解釋器的將網絡或者本地磁盤獲取的 HTML 網頁和資源從字節流解釋成 DOM 樹結構。具體過程如下 :

在 WebKit 中這一過程如下:首先是字節流,經過解碼之后是字符流,然后通過詞法分析器會被解釋成詞語(Tokens),之后經過語法分析器構建成節點,最后這些節點被組建成一棵 DOM 樹。

瀏覽器在解析html文件過程中,會 ”自上而下“ 加載,并在加載過程中進行解析渲染。在解析過程中,如果遇到請求外部資源時,如圖片、外鏈的CSS、iconfont等,請求過程是異步的,并不會影響html文檔進行加載,且統一交由 Browser 進程來處理,這使得資源在不同網頁間的共享變得很容易。

解釋 CSS

CSS 解釋過程是指從 CSS 字符串 經過 CSS 解釋器 處理后變成渲染引擎內部規則的表示過程。

生成樣式規則之后,會進行樣式規則匹配,WebKit 會為其中的一些節點(只限于可視節點)選擇合適的樣式信息,規則的匹配則是由 ElementRuleCollector 類來計算并獲得,它根據元素的屬性等,并從 DocumentRuleSets 類中獲取規則集合,依次按照 ID、類別、標簽等選擇器信息逐次匹配獲得元素的樣式。

最后,WebKit 對這些規則進行排序。對于該元素需要的樣式屬性,WebKit 選擇從高優先級規則中選取,并將樣式屬性值返回。

從整個網頁的加載和渲染過程來看,CSS 解釋和規則匹配處于 DOM 樹建立之后,RenderObject 樹建立之前,CSS 解釋器解釋后的結果會保存起來,然后 RenderObject 樹基于該結果來進行規范匹配和布局計算。當網頁有用戶交互或者動畫等動作的時候,通過 CSSDOM 等技術,JavaScript 代碼同樣可以非常方便地修改 CSS 代碼,WebKit 此時需要重新解釋樣式并重復以上這一過程。

回流與重繪

當render tree中的一部分(或全部)因為元素的規模尺寸,布局,隱藏等改變而需要重新構建。這就稱為回流(reflow)。每個頁面至少需要一次回流,就是在頁面第一次加載的時候。在回流的時候,瀏覽器會使渲染樹中受到影響的部分失效,并重新構造這部分渲染樹,完成回流后,瀏覽器會重新繪制受影響的部分到屏幕中,該過程成為重繪。
當render tree中的一些元素需要更新屬性,而這些屬性只是影響元素的外觀,風格,而不會影響布局的,比如background-color。則就叫稱為重繪。

注意:回流必將引起重繪,而重繪不一定會引起回流。

回流何時發生:

當頁面布局和幾何屬性改變時就需要回流。下述情況會發生瀏覽器回流:

1、添加或者刪除可見的DOM元素;

2、元素位置改變;

3、元素尺寸改變——邊距、填充、邊框、寬度和高度

4、內容改變——比如文本改變或者圖片大小改變而引起的計算值寬度和高度改變;

5、頁面渲染初始化;

6、瀏覽器窗口尺寸改變——resize事件發生時;

所以繪制 render 樹的過程中會發生多次回流與重繪。另外避免回流與重繪也是web優化技巧之一。

參考鏈接 :
圖解瀏覽器的基本工作原理 - 知乎
https://zhuanlan.zhihu.com/p/...
面試題之從敲入 URL 到瀏覽器渲染完成 - 全棧修煉 - SegmentFault 思否
https://segmentfault.com/a/11...
HTTP請求過程-域名解析和TCP三次握手建立鏈接 - 小Cai先森 - 博客園
https://www.cnblogs.com/caijh...
頁面重繪和回流以及優化-WEB前端開發
https://www.css88.com/archive...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99457.html

相關文章

  • 輸入 url 頁面展現短短秒內覽器究竟做了什么

    摘要:在上述過程再細化為瀏覽器搜索自己的緩存。至此,瀏覽器已經得到了域名對應的地址。具體過程如下在中這一過程如下首先是字節流,經過解碼之后是字符流,然后通過詞法分析器會被解釋成詞語,之后經過語法分析器構建成節點,最后這些節點被組建成一棵樹。 面試的時候,我們經常會被問從在瀏覽器地址欄中輸入 url 到頁面展現的短短幾秒內瀏覽器究竟做了什么?那么瀏覽器到底做了啥? 瀏覽器的多進程架構一個好的程...

    2json 評論0 收藏0
  • 輸入 url 頁面展現短短秒內覽器究竟做了什么

    摘要:在上述過程再細化為瀏覽器搜索自己的緩存。至此,瀏覽器已經得到了域名對應的地址。具體過程如下在中這一過程如下首先是字節流,經過解碼之后是字符流,然后通過詞法分析器會被解釋成詞語,之后經過語法分析器構建成節點,最后這些節點被組建成一棵樹。 面試的時候,我們經常會被問從在瀏覽器地址欄中輸入 url 到頁面展現的短短幾秒內瀏覽器究竟做了什么?那么瀏覽器到底做了啥? 瀏覽器的多進程架構一個好的程...

    tigerZH 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<