詳解瀏覽器渲染頁面過程
詳解瀏覽器渲染頁面過程
1.解析HTML文件,創(chuàng)建DOM樹
自上而下,遇到任何樣式(link、style)與腳本(script)都會(huì)阻塞(外部樣式不阻塞后續(xù)外部腳本的加載)。
2.解析CSS
優(yōu)先級(jí):瀏覽器默認(rèn)設(shè)置<用戶設(shè)置<外部樣式<內(nèi)聯(lián)樣式<HTML中的style樣式;
特定級(jí):id數(shù)*100+類或偽類數(shù)*10+tag名稱*1
3.將CSS與DOM合并,構(gòu)建渲染樹(renderingtree)
DOM樹與HTML一一對(duì)應(yīng),渲染樹會(huì)忽略諸如head、display:none的元素
4.布局和繪制,重繪(repaint)和重排(reflow)
重排:若渲染樹的一部分更新,且尺寸變化,就會(huì)發(fā)生重排;
重繪:部分節(jié)點(diǎn)需要更新,但不改變其他集合形狀。如改變某個(gè)元素的顏色,就會(huì)發(fā)生重繪。
附:
1.重繪和重排何時(shí)會(huì)發(fā)生:
(1)增加或刪除DOM節(jié)點(diǎn);
(2)display:none(重排并重繪);visibility:hidden(重排);
(3)移動(dòng)頁面中的元素;
(4)增加或修改樣式;
(5)用戶改變窗口大小,滾動(dòng)頁面等。
2.如何減少重繪和重排以提升頁面性能:
(1)不要一個(gè)個(gè)修改屬性,應(yīng)通過一個(gè)class來修改
錯(cuò)誤寫法:div.style.width="50px";div.style.top="60px";
正確寫法:div.className+=" modify";
(2)clone節(jié)點(diǎn),在副本中修改,然后直接替換當(dāng)前的節(jié)點(diǎn);
(3)若要頻繁獲取計(jì)算后的樣式,請(qǐng)暫存起來;
(4)降低受影響的節(jié)點(diǎn):在頁面頂部插入節(jié)點(diǎn)將影響后續(xù)所有節(jié)點(diǎn)。而絕對(duì)定位的元素改變會(huì)影響較少的元素;
(5)批量添加DOM:多個(gè)DOM插入或修改,應(yīng)組成一個(gè)長(zhǎng)的字符串后一次性放入DOM。使用innerHTML永遠(yuǎn)比DOM操作快。(特別注意:innerHTML不會(huì)執(zhí)行字符串中的嵌入腳本,因此不會(huì)產(chǎn)生XSS漏洞)。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
PHP實(shí)現(xiàn)本地圖片上傳和驗(yàn)證功能
這篇文章主要為大家詳細(xì)介紹了PHP實(shí)現(xiàn)本地圖片上傳和驗(yàn)證功能的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
JavaScript實(shí)現(xiàn)一個(gè)前端會(huì)魔法的旋轉(zhuǎn)魔方相冊(cè)
星光不問趕路人,時(shí)光不誤有心人,牛牛最近學(xué)到了一個(gè)神奇的旋轉(zhuǎn)魔方,今天就來分享給大家吧,希望大家能喜歡2022-06-06
js從輸入框讀取內(nèi)容,比較兩個(gè)數(shù)字的大小方法
下面小編就為大家?guī)硪黄猨s從輸入框讀取內(nèi)容,比較兩個(gè)數(shù)字的大小方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03
前端滾動(dòng)錨點(diǎn)三個(gè)常用方案(點(diǎn)擊后頁面滾動(dòng)到指定位置)
這篇文章主要給大家介紹了關(guān)于前端滾動(dòng)錨點(diǎn)的三個(gè)常用方案,實(shí)現(xiàn)的效果就是點(diǎn)擊后頁面滾動(dòng)到指定位置,三種方法分別是scrollIntoView、scrollTo和scrollBy,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01
基于原生js運(yùn)動(dòng)方式關(guān)鍵點(diǎn)的總結(jié)(推薦)
下面小編就為大家?guī)硪黄谠鷍s運(yùn)動(dòng)方式關(guān)鍵點(diǎn)的總結(jié)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10

