鍍金池/ 問(wèn)答/HTML/ 瀏覽器是怎么對(duì)html進(jìn)行渲染的?在什么時(shí)候會(huì)進(jìn)行重新渲染?

瀏覽器是怎么對(duì)html進(jìn)行渲染的?在什么時(shí)候會(huì)進(jìn)行重新渲染?

html渲染是跟js同時(shí)執(zhí)行的嗎

回答
編輯回答
涼汐

至少會(huì)有一次渲染,是在頁(yè)面加載的時(shí)候,是按照下面的步驟來(lái)的:
1.解析html,生成dom樹(shù)
2.根據(jù)css文件計(jì)算出樣式數(shù)據(jù)
3.結(jié)合dom樹(shù)和css文件,生成渲染樹(shù)
4.瀏覽器根據(jù)渲染樹(shù),將頁(yè)面繪制到屏幕上

頁(yè)面繪制到屏幕上之后,根據(jù)js腳本,還可能有重繪和重排的操作,重繪是指沒(méi)有對(duì)任何dom節(jié)點(diǎn)的形狀(大?。┻M(jìn)行改變,只改變了背景顏色等樣式;重排是指改變了dom節(jié)點(diǎn)的形狀,需要重新計(jì)算生成整個(gè)渲染樹(shù),重排的開(kāi)銷比重繪大的多。

什么時(shí)候進(jìn)行重繪或重排:
1.當(dāng)一段同步的js代碼執(zhí)行完,執(zhí)行棧為空的時(shí)候,開(kāi)始執(zhí)行事件隊(duì)列中的代碼,在執(zhí)行事件隊(duì)列中的每一個(gè)代碼塊之前,都會(huì)進(jìn)行一次重繪或重排。
2.如果在js代碼中用到了offsetxxx,因?yàn)樾枰⒓传@取最新的位置數(shù)據(jù),瀏覽器會(huì)馬上計(jì)算生成渲染樹(shù),這時(shí)會(huì)進(jìn)行一次重繪或重排嗎,還是只計(jì)算渲染樹(shù)?(經(jīng)過(guò)測(cè)試,使用到offsetxxx的時(shí)候,并不會(huì)重新將頁(yè)面渲染到屏幕上,但是能獲得正確的值,所以只是重新計(jì)算了渲染樹(shù))

2018年8月15日 15:40