如圖,點(diǎn)擊按鈕之后往document.body里append了一個(gè)新的按鈕,那這個(gè)新的按鈕是怎么更新到頁面上去的,原來的按鈕是否會(huì)重新渲染一遍?
本來我覺得既然是appendChild的話是添加為body節(jié)點(diǎn)的最后一個(gè)子元素應(yīng)該不會(huì)重新渲染整個(gè)Dom樹,但是就在這個(gè)頁面中打開控制臺(tái)試了一下,好像跟我想象的不太一樣。
控制臺(tái)中干了這么件事
然后在Performance中記錄了大概六秒
可以算出6634/50=132.68
也就是說這段時(shí)間里我的interval向body添加了大概132次div,花費(fèi)在Rendering的時(shí)間一共1433.7毫秒(回流?)painting花費(fèi)了376.2毫秒(重繪?)
但是這應(yīng)該看不出來是否重新渲染了整個(gè)DOM,所以我又接著看
找了其中一幀吧,在紅線標(biāo)出的這一幀中,Main中有幾個(gè)事件塊,分別是(timerfired)- recalculate style - Layout - update layer tree - paint - composite(綜合)layers
其中Layout 和 paint 里查看詳情,Layer Root上寫的是#document
就此明了,如果我的操作和理解沒有問題的話,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)
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隱藏顯示隱藏顯示,嘿嘿,全部重繪,累死瀏覽器,哼
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。