簡述頁面重構(gòu)渐白、瀏覽器重繪與重排(回流)

頁面重構(gòu)

(個人觀點)頁面任何的變化都可以稱為頁面重構(gòu):完全重構(gòu)、細節(jié)調(diào)整逞频。

  • 注意:
    簡單的外部組件、測試工具的使用栋齿、預(yù)留空間(未來的更新)苗胀、編程語言、開發(fā)環(huán)境瓦堵、版本控制工具(本人使用GIT)基协、新與穩(wěn)定技術(shù)的選擇、編碼標(biāo)準統(tǒng)一菇用、資源合并(自動化工具(本人使用gulp)澜驮,提高HTTP傳輸效率)動態(tài)編譯、資源存儲(減少cookies惋鸥,增加本地存儲杂穷、數(shù)據(jù)連接池等的使用)、響應(yīng)式布局卦绣、其他最佳實踐......
    文章摘自 前端重構(gòu)相關(guān)細節(jié)貼士

瀏覽器重繪

  • 瀏覽器加載文檔

瀏覽器從下載文檔到顯示頁面的過程是個復(fù)雜的過程耐量,這里包含了重繪和重排。各家瀏覽器引擎的工作原理略有差別滤港,但也有一定規(guī)則廊蜒。簡單講,通常在文檔初次加載時溅漾,瀏覽器引擎會解析HTML文檔來構(gòu)建DOM樹山叮,之后根據(jù)DOM元素的幾何屬性構(gòu)建一棵用于渲染的樹。渲染樹的每個節(jié)點都有大小和邊距等屬性添履,類似于盒子模型(由于隱藏元素不需要顯示屁倔,渲染樹中并不包含DOM樹中隱藏的元素)。當(dāng)渲染樹構(gòu)建完成后缝龄,瀏覽器就可以將元素放置到正確的位置了汰现,再根據(jù)渲染樹節(jié)點的樣式屬性繪制出頁面挂谍。由于瀏覽器的流布局,對渲染樹的計算通常只需要遍歷一次就可以完成瞎饲。但table及其內(nèi)部元素除外口叙,它可能需要多次計算才能確定好其在渲染樹中節(jié)點的屬性,通常要花3倍于同等元素的時間嗅战。這也是為什么我們要避免使用table做布局的一個原因妄田。

重繪是一個 **元素外觀 ** 的改變所觸發(fā)的瀏覽器行為,例如改變visibility驮捍、outline疟呐、背景色等屬性。瀏覽器會根據(jù)元素的新屬性重新繪制东且,使元素呈現(xiàn)新的外觀启具。重繪不會帶來重新布局,并不一定伴隨重排珊泳。

瀏覽器重排(回流)

重排是更明顯的一種改變鲁冯,可以理解為渲染樹需要重新計算。下面是常見的觸發(fā)重排的操作:

  1. DOM元素的幾何屬性變化
    當(dāng)DOM元素的幾何屬性變化時色查,渲染樹中的相關(guān)節(jié)點就會失效薯演,瀏覽器會根據(jù)DOM元素的變化重新構(gòu)建渲染樹中失效的節(jié)點.
    重排一定會引起瀏覽器的重繪,一個元素的重排通常會帶來一系列的反應(yīng)秧了,甚至觸發(fā)整個文檔的重排和重繪跨扮,性能代價是高昂的。
  2. DOM樹的結(jié)構(gòu)變化
    當(dāng)DOM樹的結(jié)構(gòu)變化時验毡,例如節(jié)點的增減衡创、移動等,也會觸發(fā)重排米罚。瀏覽器引擎布局的過程钧汹,類似于樹的前序遍歷,是一個從上到下從左到右的過程录择。通常在這個過程中拔莱,當(dāng)前元素不會再影響其前面已經(jīng)遍歷過的元素。所以隘竭,如果在body最前面插入一個元素塘秦,會導(dǎo)致整個文檔的重新渲染,而在其后插入一個元素动看,則不會影響到前面的元素尊剔。
  3. 獲取某些屬性
    瀏覽器引擎可能會針對重排做了優(yōu)化。比如Opera菱皆,它會等到有足夠數(shù)量的變化發(fā)生须误,或者等到一定的時間挨稿,或者等一個線程結(jié)束,再一起處理京痢,這樣就只發(fā)生一次重排奶甘。但除了渲染樹的直接變化,當(dāng)獲取一些屬性時祭椰,瀏覽器為取得正確的值也會觸發(fā)重排臭家。這樣就使得瀏覽器的優(yōu)化失效了。這些屬性包括:offsetTop方淤、offsetLeft钉赁、 offsetWidth、offsetHeight携茂、scrollTop你踩、scrollLeft、scrollWidth讳苦、scrollHeight姓蜂、clientTop、clientLeft医吊、clientWidth、clientHeight逮京、getComputedStyle() (currentStyle in IE)卿堂。所以,在多次使用這些值時應(yīng)進行緩存懒棉。
  4. 其他
    改變?yōu)g覽器窗口大小草描、改變一些元素的樣式
  • 解決重排:(部分方法)
    合并多次改變樣式屬性的操作;使需要多次改變的元素脫離文檔流策严;在內(nèi)存中多次操作節(jié)點穗慕,完成后再添加到文檔中去(有動畫效果時);由于display屬性為none的元素不在渲染樹中妻导,對隱藏的元素操作不會引發(fā)其他元素的重排逛绵;在需要經(jīng)常獲取那些引起瀏覽器重排的屬性值時,要緩存到變量倔韭。
    文章摘自瀏覽器重構(gòu)與重排
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末术浪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子寿酌,更是在濱河造成了極大的恐慌胰苏,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件醇疼,死亡現(xiàn)場離奇詭異硕并,居然都是意外死亡法焰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門倔毙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埃仪,“玉大人,你說我怎么就攤上這事普监」笫裕” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵凯正,是天一觀的道長毙玻。 經(jīng)常有香客問我,道長廊散,這世上最難降的妖魔是什么桑滩? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮允睹,結(jié)果婚禮上运准,老公的妹妹穿的比我還像新娘。我一直安慰自己缭受,他們只是感情好胁澳,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著米者,像睡著了一般韭畸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蔓搞,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天胰丁,我揣著相機與錄音,去河邊找鬼喂分。 笑死锦庸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蒲祈。 我是一名探鬼主播甘萧,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼讳嘱!你這毒婦竟也來了幔嗦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤沥潭,失蹤者是張志新(化名)和其女友劉穎邀泉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡汇恤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年庞钢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片因谎。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡基括,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出财岔,到底是詐尸還是另有隱情风皿,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布匠璧,位于F島的核電站桐款,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏夷恍。R本人自食惡果不足惜魔眨,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望酿雪。 院中可真熱鬧遏暴,春花似錦、人聲如沸指黎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽醋安。三九已至侥啤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茬故,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工蚁鳖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留磺芭,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓醉箕,卻偏偏與公主長得像钾腺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子讥裤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容