曾經比較流行的jquery框架主要優點之一:出色的DOM操作的封裝。但是,目前流行的框架中基本上都摒棄了DOM操作的方法。
主要原因大致上都是在說要減少dom層的操作,原因是因爲dom操作慢。
那麼dom操作爲什麼慢?
這就要提及瀏覽器渲染頁面,瀏覽器分爲:渲染引擎和js引擎。
渲染引擎工作:
1、解析HTML代碼,生產DOM tree。
2、解析CSS樣式,結合DOM tree生產Render tree(display:none;的結點不會存在Render tree上,最後不會被paint)。
3、計算Render tree 各個節點的佈局信息,比如box的位置、尺寸、顏色、外形等。
4、根據計算後的佈局信息,調用瀏覽器的UI引擎進行渲染。
而操作dom會產生幾種動作,極大的影響渲染的效率。其中layout(佈局)和paint(繪製)是最大的。
1、layout就是佈局變動造成重新計算(耗CPU,有時也很耗內存)。
2、paint就是調用瀏覽器UI引擎進行渲染展示頁面(耗cpu和內存)。
虛擬DOM
1、虛擬DOM不會進行排版與重繪操作。
2、虛擬DOM進行頻繁修改,然後一次性比較並修改真實DOM中需要改的部分,最後並在真實DOM中進行排版與重繪,減少過多DOM節點排版與重繪,減少過多DOM節點排版與重繪損耗。
3、真實DOM頻繁排版與重繪的效率是相當低的。
4、虛擬DOM有效降低大面積(真實DOM節點)的重繪與排版,因爲最終與真實DOM比較差異,可以只渲染局部。