瀏覽器的解析原理

2022-03-31 02:12:51 字數 1990 閱讀 2935

從上圖,我們能看到這幾點:

瀏覽器會解析

解析完成後,瀏覽器引擎會通過dom tree 和 css rule tree 來構造 render tree(渲染樹)。注意:render tree 渲染樹並不等於dom樹,因為head元素和一些display:none的元素沒有放在渲染樹中

有下面的html示例如下:

這是乙個

大錯誤

這也是乙個

非常大的錯誤錯誤

另乙個錯誤

然後我們的css文件是這樣的:

/*1.*/ div  

/*2.*/ .err

/*3.*/ .big

/*4.*/ div span

/*5.*/ #div1

/*6.*/ #div2

於是我們的css rule tree是這樣:

注意:css匹配html元素是乙個相當複雜和有效能問題的事情。所以,你就會在n多地方看到很多人都告訴你,dom樹要小,css盡量用id和class,千萬不要過渡層疊下去,……

通過這兩個樹,我們可以得到乙個叫style context tree,也就是下面這樣(把css rule結點attach到dom tree上):

這個時候就有必要說下這個css選擇器特性了

css選擇器由css2規範定義如下:

連線四個數字abcd(在具有大基數的數字系統中)具有特異性。

這個四個數字保持的優先順序是:a>b>c>d

您需要使用的數字基數由您在其中乙個類別中的最高數量定義。

例如,如果a = 14,您可以使用十六進製制基數。在不太可能的情況下,您將需要乙個17位數的基數。後來的情況可能會發生在這樣的選擇器:html body div div p ...(你的選擇器中的17個標籤不太可能)。

一些例子:

* {} / * a = 0 b = 0 c = 0 d = 0  - > specificity = 0,0,0,0 * / 

li {} / * a = 0 b = 0 c = 0 d = 1 - >specificity= 0,0,0,1 * /

li:first-line {} / * a = 0 b = 0 c = 0 d = 2 - > specificity = 0,0,0,2 * /

ul li {} / * a = 0 b = 0 c = 0 d = 2 - > specificity = 0,0,0,2 * /

ul ol + li {} / * a = 0 b = 0 c = 0 d = 3 - > specificity = 0 ,0,0,3 * /

h1 + * [rel = up] {} / * a = 0 b = 0 c = 1 d = 1 - > specificity = 0,0,1,1 * /

ul ol li.red {} / * a = 0 b = 0 c = 1 d = 3 - > specificity = 0,0,1,3 * /

li.red.level {} / * a = 0 b = 0 c = 2 d = 1 - > specificity = 0,0,2,1 * /

#test {} / * a = 0 b = 1 c = 0 d = 0 - > specificity = 0,1,0,0 * /

style =「」/ * a = 1 b = 0 c = 0 d = 0 - > specificity = 1,0,0,0 * /

how browsers work

css2規範

瀏覽器渲染原理解析

頁面為什麼會慢?那是因為瀏覽器要花時間 花精力去渲染,尤其是當它發現某個部分發生了點變化影響了布局,需要倒回去重新渲染,內行稱這個回退的過程叫reflow。reflow問題是可以優化的,我們可以儘量減少不必要的reflow。比如開頭的例子中的 載入問題,這其實就是乙個可以避免的reflow 給設定寬...

瀏覽器原理

網上找了些資料,記錄下部落格連線 how browsers work behind the scenes of modern web browsers 瀏覽器執行機制 回流 重繪 關鍵渲染路徑 學習筆記。請參看分享的文章先。瀏覽器資訊部分 記錄點 1主流瀏覽器有五個 internet explore...

瀏覽器渲染原理

最近在開發b s 框架的專案。開發都是web頁面,也就是執行在瀏覽器上的使用者操作頁面。瀏覽器是使用者得到服務最直接的地方,後台做的好,前台也要讓使用者用著方便。這裡就研究一下瀏覽器的一些原理是如何提高使用者體驗的。首先,這裡有乙個新詞,渲染。什麼是網頁渲染呢?網頁渲染就是html 根據css定義的...