1. 程式人生 > >談談頁面渲染機制

談談頁面渲染機制

這是大白養成記(現在是小白)的第一篇,坐了很久不知道怎麼開始,那就把之前看的面試視訊(慕課網:前端面試必備技巧)裡的知識點盤點下當作一種輸出,加強下理解和記憶,老師講的很好,所以我也要努力呀。以前看的多忘的也多,實踐相對較少,總結性的就是更少了。“紙上得來終覺淺,絕知此事要躬行”,實踐輸出才是檢驗真理的唯一標準。好了,廢話不多說,開始吧。

1.瞭解doctype以及它的作用

標準的html頁面頭部第一行都有doctype的宣告,並且你會發現並不是所有的doctype都一致,它是用來幹嘛的,又有哪幾種呢?

doctype是什麼:

DTD:(document type definition,文件型別定義) 是一系列的語法規則,用來定義xml或者(x)HTML的檔案型別。就是告訴瀏覽器當前文件是什麼型別的,需要用什麼引擎來解析它。

DOCTYPE是document type(文件型別)的簡寫,用來說明你用的XHTML或者HTML是什麼版本。瀏覽器就根據你定義的DTD來解釋你頁面的標識,並展現出來。

常見的DOCTYPE型別:

1.html5

<!DOCTYPE html>

1.用於XHTML 4.0 的嚴格型 (該dtd包含所有的HTML元素和屬性,但不包括展示型的和棄用性的元素比如font)

<!DOCTYPE HTMLPUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

/用於XHTML 4.0 的傳統型 (該dtd包含所有的HTML元素和屬性,包括展示型的和棄用性的元素比如font)

<!DOCTYPE HTMLPUBLIC "-//W3C//DTD HTML 4.01Transitional//EN " "http://www.w3.org/TR/html4/loose.dtd">

HTML5因為不基於 SGML,因此不需要對DTD進行引用;但是需要doctype來規範瀏覽器的行為(讓瀏覽器按照它們應該的方式來執行)。 而HTML4.01基於SGML,所以需要對DTD進行引用,才能告知瀏覽器文件所使用的文件型別。


2.瀏覽器渲染過程

首先放一張瀏覽器渲染流程圖(網路上找的)



當瀏覽器拿到 HTML 和css,通過HTML解析器和css解析器分別生成DOM tree 和 CSSom兩者結合形成renderTree ,此時的renderTree還不知道在哪個位置放置節點,是通過瀏覽器的Layout告訴它具體的位置樣式,最後繪製出我們最終看到的頁面效果。這個就是瀏覽渲染的基本過程。

說到渲染,有兩個概念需要提及,重繪和重排。那什麼是重繪和重排,什麼操作會觸發這個兩個過程呢?

重排Reflow:DOM結構中的各個元素都有自己的盒子模型,瀏覽器根據各種樣式計算得出結果將元素放到具體的位置上,這個過程我們稱之為reflow

哪些動作觸發reflow

  1. 增刪改DOM節點
  2. 修改css樣式
  3. 移動DOM節點
  4. 改變視窗大小,改變文字大小
  5. 內容的改變,
  6. 設定offsetHeight,offsetWidth

重繪Repaint:瀏覽器根據盒子具體的位置,大小和顏色等屬性,將各元素按照各自的特性都繪製一遍。這個過程為重繪。如果只是改變某個元素的背景色、文字顏色、邊框顏色等等不影響它周圍或內部佈局的屬性,將只會引起瀏覽器 repaint

哪些動作觸發repaint: css和dom的改動都會引起repaint

瀏覽器在渲染過程中的reflow和repaint會大大影響web的效能,因此我們要避免reflow和減少repaint,如減少上面的觸發條件;在為dom新增節點的時候,建立一個變數儲存所有的子節點,當所有操作完畢之後 再一次性新增到dom上來。

以上。

寫文件真比想象當中要困難,望繼續堅持。