瀏覽器渲染和優(yōu)化:重繪(Repaint)和重排(Reflow)

瀏覽器的主要功能是將用戶選擇的web資源呈現(xiàn)出來,它需要從服務(wù)器請求資源,并將其顯示在瀏覽器窗口中,資源的格式通常是HTML,也包括PDF辑畦,image及其他格式。用戶用URL來指定所請求資源的位置腿倚,通過DNS查詢纯出,將網(wǎng)址轉(zhuǎn)換為IP地址。

瀏覽器工作流程:


1.輸入網(wǎng)址敷燎。

2.瀏覽器查找域名的IP地址

3,瀏覽器給WEB服務(wù)器發(fā)送一個HTTP請求

4.網(wǎng)站服務(wù)的永久重定向響應(yīng)

5.瀏覽器跟蹤重定向地址(現(xiàn)在瀏覽器知道了要訪問的正確地址潦刃,所以它會發(fā)送另一個獲取請求)

6,服務(wù)器“處理”請求懈叹,服務(wù)器接收到獲取請求乖杠,然后處理并返回一個響應(yīng)。

7.服務(wù)器發(fā)回一個HTML響應(yīng)

8.瀏覽器開始顯示HTML

9,瀏覽器發(fā)送請求澄成,以獲取嵌入在HTML中的對象

瀏覽器的渲染過程:



1.處理html生成Dom(Document Object Model) Tree

2.處理css生成CSSOM(CSS Object Model) Tree

3.在文檔對象模型和CSS對象模型之上胧洒,創(chuàng)建一棵由一組待生成渲染的對象組成的渲染樹,即RenderTree

4.對Render樹進行布局計算墨状,即對渲染樹上的每個元素卫漫,計算它的坐標,稱之為布局肾砂。

5.繪制即Painting,渲染樹上的元素最終展示在瀏覽器里

關(guān)于瀏覽器的優(yōu)化列赎,首先我們需要先了解一下重繪和重排。

重繪(Repaint):布局沒有發(fā)生改變镐确,改變那些不會影響元素在網(wǎng)頁中的位置的元素樣式時包吝,譬如background-color(背景色), border-color(邊框色)源葫, visibility(可見性)诗越,瀏覽器只會用新的樣式將元素重繪一次(這就是重繪,或者說重新構(gòu)造樣式)

重排(Reflow):當DOM變化影響了元素的幾何屬性(寬息堂、高改變等等)嚷狞,瀏覽器此時需要重新計算元素幾何屬性块促,并且頁面中其他元素的幾何屬性可能會受影響這樣渲染樹就發(fā)生了改變,也就是重新構(gòu)造RenderTree渲染樹

觸發(fā)重排的情況:


(1)頁面初始渲染

(2)DOM操作(元素添加床未、刪除竭翠、修改或者元素順序的改變)

(3)改變元素位置,改變元素尺寸(寬薇搁、高斋扰、內(nèi)外邊距、邊框等)只酥,改變元素內(nèi)容(文本或圖片等)

(4)瀏覽器窗口的操作(縮放,滾動)

(5)添加或刪除樣式表

(6)更改“類”的屬性

(7)偽類激活(懸停)

優(yōu)化:

(1)減少重繪和重排

(1)不要一條一條地修改 DOM 的樣式呀狼。與其這樣裂允,還不如預(yù)先定義好 css 的 class,然后修改 DOM 的 className哥艇。

(2)不要把 DOM 結(jié)點的屬性值放在一個循環(huán)里當成循環(huán)里的變量绝编。?

(3)為動畫的 HTML 元件使用 fixed 或 absoult 的 position,那么修改他們的 CSS 是不會 reflow 的貌踏。?

(4)千萬不要使用 table 布局十饥。因為可能很小的一個小改動會造成整個 table 的重新布局。

(2)編寫CSS注意事項

CSS選擇符是從右到左進行匹配的祖乳,切記逗堵!所以,#nav li 我們以為這是一條很簡單的規(guī)則眷昆,秒秒鐘就能匹配到想要的元素蜒秤,但是,是從右往左匹配啊亚斋,所以作媚,會去找所有的li,然后再去確定它的父元素是不是#nav帅刊。纸泡,因此,寫css的時候需要注意:

(1)dom深度盡量淺赖瞒。

(2) 減少inline javascript女揭、css的數(shù)量。使用現(xiàn)代合法的css屬性栏饮。

(3) 不要為id選擇器指定類名或是標簽田绑,因為id可以唯一確定一個元素。

(4)避免后代選擇符抡爹,盡量使用子選擇符掩驱。原因:子元素匹配符的概率要大于后代元素匹配符。后代選擇符;#tp p{} 子選擇符:#tp>p{}

(51) 避免使用通配符,舉一個例子欧穴,.mod .hd *{font-size:14px;} 根據(jù)匹配順序,將首先匹配通配符,也就是說先匹配出通配符,然后匹配.hd(就是要對dom樹上的所有節(jié)點進行遍歷他的父級元素),然后匹配.mod,這樣的性能耗費可想而知.

(3)Script標簽的位置

首先民逼,我們需要了解Javascript的加載和執(zhí)行的特點:?

(1)載入后馬上執(zhí)行,按順序從上向下執(zhí)行涮帘;?

(2)執(zhí)行時會阻塞頁面后續(xù)的內(nèi)容(包括頁面的渲染拼苍、其它資源的下載)。原因:因為瀏覽器需要一個穩(wěn)定的DOM樹結(jié)構(gòu)调缨,而JS中很有可能有 代碼直接改變了DOM樹結(jié)構(gòu)疮鲫,比如使用 document.write 或 appendChild,甚至是直接使用的location.href進行跳轉(zhuǎn),瀏覽器為了防止出現(xiàn)JS修 改DOM樹弦叶,需要重新構(gòu)建DOM樹的情況俊犯,所以 就會阻塞其他的下載和呈現(xiàn)。

減少 JavaScript 對性能的影響的方法:

(1)將所有的script標簽放到頁面底部伤哺,也就是body閉合標簽之前燕侠,這能確保在腳本執(zhí)行前頁面已經(jīng)完成了DOM樹渲染。

(2)盡可能地合并腳本立莉。頁面中的script標簽越少绢彤,加載也就越快,響應(yīng)也越迅速蜓耻。無論是外鏈腳本還是內(nèi)嵌腳本都是如此茫舶。

(3)采用無阻塞下載 JavaScript 腳本的方法:?

????????a.使用script標簽的 defer 屬性(僅適用于 IE 和 Firefox 3.5 以上版本);?

????????b.使用動態(tài)創(chuàng)建的script元素來下載并執(zhí)行代碼刹淌;

(4)?減少http請求的次數(shù)

根據(jù)功能和數(shù)據(jù)加載流程合并相應(yīng)的js,css,images 減少其請求的次數(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奇适,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子芦鳍,更是在濱河造成了極大的恐慌嚷往,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柠衅,死亡現(xiàn)場離奇詭異皮仁,居然都是意外死亡,警方通過查閱死者的電腦和手機菲宴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門贷祈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喝峦,你說我怎么就攤上這事势誊。” “怎么了谣蠢?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵粟耻,是天一觀的道長查近。 經(jīng)常有香客問我,道長挤忙,這世上最難降的妖魔是什么霜威? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮册烈,結(jié)果婚禮上戈泼,老公的妹妹穿的比我還像新娘。我一直安慰自己赏僧,他們只是感情好大猛,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著淀零,像睡著了一般挽绩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窑滞,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天琼牧,我揣著相機與錄音恢筝,去河邊找鬼哀卫。 笑死,一個胖子當著我的面吹牛撬槽,可吹牛的內(nèi)容都是我干的此改。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼侄柔,長吁一口氣:“原來是場噩夢啊……” “哼共啃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起暂题,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤移剪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后薪者,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纵苛,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年言津,在試婚紗的時候發(fā)現(xiàn)自己被綠了攻人。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡悬槽,死狀恐怖怀吻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情初婆,我是刑警寧澤蓬坡,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布猿棉,位于F島的核電站,受9級特大地震影響渣窜,放射性物質(zhì)發(fā)生泄漏铺根。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一乔宿、第九天 我趴在偏房一處隱蔽的房頂上張望位迂。 院中可真熱鬧,春花似錦详瑞、人聲如沸掂林。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泻帮。三九已至,卻和暖如春计寇,著一層夾襖步出監(jiān)牢的瞬間锣杂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工番宁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留元莫,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓蝶押,卻偏偏與公主長得像踱蠢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子棋电,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

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