在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ document.body.appendChild()會(huì)重新渲染整棵DOM樹嗎?

document.body.appendChild()會(huì)重新渲染整棵DOM樹嗎?

如圖,點(diǎn)擊按鈕之后往document.body里append了一個(gè)新的按鈕,那這個(gè)新的按鈕是怎么更新到頁面上去的,原來的按鈕是否會(huì)重新渲染一遍?

圖片描述

回答
編輯回答
撥弦

會(huì)的,因?yàn)楦淖兞隧撁娴慕Y(jié)構(gòu)

2017年8月20日 00:31
編輯回答
尛曖昧

應(yīng)該會(huì)的,瀏覽器需要重新計(jì)算各個(gè)節(jié)點(diǎn)的位置,不然怎么知道新加的東西是在前面還是后面

2017年5月21日 06:30
編輯回答
疚幼

本來我覺得既然是appendChild的話是添加為body節(jié)點(diǎn)的最后一個(gè)子元素應(yīng)該不會(huì)重新渲染整個(gè)Dom樹,但是就在這個(gè)頁面中打開控制臺(tái)試了一下,好像跟我想象的不太一樣。

clipboard.png

控制臺(tái)中干了這么件事
然后在Performance中記錄了大概六秒

clipboard.png
可以算出6634/50=132.68
也就是說這段時(shí)間里我的interval向body添加了大概132次div,花費(fèi)在Rendering的時(shí)間一共1433.7毫秒(回流?)painting花費(fèi)了376.2毫秒(重繪?)
但是這應(yīng)該看不出來是否重新渲染了整個(gè)DOM,所以我又接著看

clipboard.png

找了其中一幀吧,在紅線標(biāo)出的這一幀中,Main中有幾個(gè)事件塊,分別是(timerfired)- recalculate style - Layout - update layer tree - paint - composite(綜合)layers
其中Layout 和 paint 里查看詳情,Layer Root上寫的是#document

clipboard.png

就此明了,如果我的操作和理解沒有問題的話,document.body.appendChild()會(huì)重新渲染整棵DOM樹

=================================華麗的轉(zhuǎn)折=============================================
提交回答后感覺越想越不對勁,于是又花時(shí)間多試了試,發(fā)現(xiàn)幾次測試后就算換成了其他的節(jié)點(diǎn)上增加還是刪除節(jié)點(diǎn),分析中的layer root 都是#document,果然剛才的回答太草率了。
圖片描述

從圖上可以看到layout root沒有變化,只是nodes that need layout 不一樣。
然后。。。
圖片描述

圖片描述
將回答區(qū)域的el一個(gè)一個(gè)移除,查看分析后貌似重繪的只有自己和自己的子節(jié)點(diǎn)
不甘心,然后又刷新整個(gè)頁面看了下
圖片描述
頁面加載時(shí)候的第一次回流應(yīng)該是需要處理所有節(jié)點(diǎn)的吧Nodes that need layout(1059 of 1059)
然后我又按照剛才回答的方法繼續(xù)在body上appendChild,
查看分析發(fā)現(xiàn)

clipboard.png

nodes that need layout 需要layout的nodes少了(換了個(gè)頁面,所以總元素變成了641)

但愿這次分是是對的,別再說錯(cuò)了影響大家,如果有大手看到了有問題求指正
所以通過這次的折騰我最后的結(jié)論是不會(huì)重新渲染整個(gè)DOM(Chrome瀏覽器),至少是對于添加到最后的子元素應(yīng)該不會(huì)影響到兄弟節(jié)點(diǎn)吧,嗯,應(yīng)該是這樣,憂傷。

======================================PS======================================
emmmmm我覺得自己好啰嗦
不死心,然后又before在前邊插,然后挑選body中間的子節(jié)點(diǎn)在子節(jié)點(diǎn)中插,發(fā)現(xiàn)結(jié)果大同小異,need layout 值都不高,把原因拽給瀏覽器優(yōu)化的結(jié)果。
最后寫了個(gè)計(jì)時(shí)器喪心病狂的將body隱藏顯示隱藏顯示,嘿嘿,全部重繪,累死瀏覽器,哼

clipboard.png

2017年11月19日 04:36
編輯回答
維她命

添加刪除元素會(huì)引起瀏覽器的"重排"

2017年5月10日 20:32
編輯回答
有你在
  • 對于元素布局上的改變(增刪節(jié)點(diǎn),觸發(fā)resize事件,修改style屬性等)會(huì)觸發(fā)回流
  • 對于元素視覺上的改變(如改變outline,background-color,visibility等)會(huì)觸發(fā)重繪
2018年6月18日 23:16