16、render樹、解析和加載倔监、回流和重繪

解析和加載

  • 加載是一個(gè)異步的過程 直砂,例如圖片的請求渲染不會(huì)影響整個(gè)html的加載和渲染

解析的過程

  • 形成dom tree ,render tree是個(gè)對象
  • 形成css tree浩习,根據(jù)樣式表形成樣式tree
  • 將dom tree和css tree有機(jī)結(jié)合起來形成render tree
  • render tree構(gòu)建完畢后静暂,開始渲染頁面
  • display none的元素、head谱秽、script元素不會(huì)包含在render tree里洽蛀。

回流和重繪

  • 回流:當(dāng)頁面的布局發(fā)生變化,渲染頁面時(shí)疟赊,計(jì)算布局位置的過程叫做回流郊供。
  • 重繪:所有的回流操作,都會(huì)導(dǎo)致相關(guān)元素進(jìn)行重繪近哟。
    • 僅改變顏色及其他不影響元素物理變化的行為驮审,會(huì)只導(dǎo)致重繪。
  • 引起回流的操作有:
    • 頁面首次加載吉执、渲染疯淫、
    • 布局變化(增加或刪除元素)、
    • display: none戳玫、visibility: hidden;不會(huì)引起回流熙掺,只會(huì)引起重繪
    • 邊距、
    • 位置咕宿、
    • 大小(包括字體大小)
    • 頁面渲染初始化
    • 改變?yōu)g覽器窗口大小
    • 請求offset币绩、client、scroll府阀、width缆镣、height、getComputedStyle或ie的currentStyle等
  • 引起回流的特征是元素發(fā)生了物理性變化
    • 回流比重繪更影響瀏覽器的性能
    • 如果在body子元素最前面添加元素肌似,會(huì)導(dǎo)致整個(gè)頁面重新渲染
    • 如果在body子元素最后面添加元素费就,只會(huì)繪制最后面的元素
    • 如果父節(jié)點(diǎn)發(fā)生回流诉瓦,會(huì)導(dǎo)致所有子節(jié)點(diǎn)回流+重繪川队。
  • 優(yōu)化:
    • 減少回流的次數(shù),盡量避免單個(gè)css屬性挨個(gè)去處理睬澡。
      • 較好的方式是修改classname
      • 使用documentFragment或新創(chuàng)建的div對數(shù)據(jù)進(jìn)行緩存固额,最后append到body中。
        • 如var fragment = document.createDocumentFragment();
        • fragment.appendChild(多個(gè)新創(chuàng)建的div);
        • document.body.append(fragment);
      • 使用el.style.cssText = 'width:' + wNum + 'px; height:' + hNum + 'px;';
      • 將元素的display設(shè)置為none煞聪,然后對元素的樣式隨意設(shè)置斗躏,最后將display設(shè)置為'block';
    • 減少回流影響的規(guī)模
      • 盡可能的在末尾添加或刪除元素
    • 瀏覽器隊(duì)列機(jī)制
      • 較新的瀏覽器會(huì)將多次回流操作放置到隊(duì)列中,在固定的時(shí)間內(nèi)刷新隊(duì)列昔脯,批量執(zhí)行回流操作啄糙,減少回流次數(shù)笛臣。
      • 當(dāng)訪問offset、client等屬性時(shí)隧饼,會(huì)強(qiáng)制瀏覽器刷新隊(duì)列(這樣瀏覽器才能獲取到精確的樣式值)沈堡,因此盡量避免重復(fù)調(diào)用el.offset,要將其進(jìn)行變量緩存燕雁。如果el.offset是動(dòng)態(tài)變化的诞丽,使用getComputedStyle要比el.offset性能更好。
    • 動(dòng)畫相關(guān)
      • 要使用絕對定位動(dòng)態(tài)操作top left等值拐格,這樣父級元素不會(huì)引起回流重繪
      • 但使用margin會(huì)導(dǎo)致父級元素回流和重繪僧免。
    • table
      • 使用table元素性能要比其他元素差很多,屬于彈性元素捏浊,內(nèi)部封裝了較多的東西懂衩,容易引起頁面回流。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末金踪,一起剝皮案震驚了整個(gè)濱河市勃痴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌热康,老刑警劉巖沛申,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異姐军,居然都是意外死亡铁材,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門奕锌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來著觉,“玉大人,你說我怎么就攤上這事惊暴”穑” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵辽话,是天一觀的道長肄鸽。 經(jīng)常有香客問我,道長油啤,這世上最難降的妖魔是什么典徘? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮益咬,結(jié)果婚禮上逮诲,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好梅鹦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布裆甩。 她就那樣靜靜地躺著,像睡著了一般齐唆。 火紅的嫁衣襯著肌膚如雪淑掌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天蝶念,我揣著相機(jī)與錄音抛腕,去河邊找鬼。 笑死媒殉,一個(gè)胖子當(dāng)著我的面吹牛担敌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播廷蓉,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼全封,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桃犬?” 一聲冷哼從身側(cè)響起刹悴,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎攒暇,沒想到半個(gè)月后土匀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡形用,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年就轧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片田度。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妒御,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出镇饺,到底是詐尸還是另有隱情乎莉,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布奸笤,位于F島的核電站惋啃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏揭保。R本人自食惡果不足惜肥橙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一魄宏、第九天 我趴在偏房一處隱蔽的房頂上張望秸侣。 院中可真熱鬧,春花似錦、人聲如沸味榛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搏色。三九已至善茎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間频轿,已是汗流浹背垂涯。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留航邢,地道東北人耕赘。 一個(gè)月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像膳殷,于是被迫代替她去往敵國和親操骡。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354