中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術(shù)文檔 > 網(wǎng)頁制作 > 頁面重構(gòu)應(yīng)注意的repaint和reflow
CSS自定義滾動(dòng)條樣式 回到列表 用ControlJS優(yōu)化阿里媽媽廣告
 頁面重構(gòu)應(yīng)注意的repaint和reflow

作者:kllb520 時(shí)間: 2011-03-27 文檔類型:原創(chuàng) 來自:藍(lán)色理想

最近了解了下repaintreflow的相關(guān)知識(shí),覺得在頁面重構(gòu)過程中就應(yīng)該考慮前端開發(fā)(js)人員對(duì)dom進(jìn)行操作,能夠減輕客戶瀏覽器的鴨梨。
在這里整理了一下相關(guān)資料,推薦看帖子底部的文章,如果覺得排版不夠好請(qǐng)移步我的博客圍觀。這是一個(gè)討論帖,拋磚引玉,大家說說自己工作中的經(jīng)驗(yàn)~

1. 什么是 repaint 和 reflow?

一個(gè)頁面由兩部分組成:
DOM:描述該頁面的結(jié)構(gòu)
render:描述 DOM 節(jié)點(diǎn) (nodes) 在頁面上如何呈現(xiàn)

當(dāng) DOM 元素的屬性發(fā)生變化 (如 color) 時(shí), 瀏覽器會(huì)通知 render 重新描繪相應(yīng)的元素, 此過程稱為 repaint。

如果該次變化涉及元素布局 (如 width), 瀏覽器則拋棄原有屬性, 重新計(jì)算并把結(jié)果傳遞給 render 以重新描繪頁面元素, 此過程稱為 reflow。

這兩個(gè)過程是很耗費(fèi)瀏覽器性能的, 從 IE 系列和 Chrome 渲染頁面速度上的差距即可看出渲染引擎計(jì)算對(duì)應(yīng)值和呈現(xiàn)并不一定高效, 而每次對(duì)元素的操作都會(huì)發(fā)生 repaints 或 reflow, 因此編寫 DOM 交互時(shí)如果不注意就會(huì)導(dǎo)致頁面性能低下.
頁面渲染的過程如下:

1.解析HTML代碼并生成一個(gè) DOM 樹。

2.解析CSS文件,順序?yàn)椋簽g覽器默認(rèn)樣式->自定義樣式->頁面內(nèi)的樣式。

3.生成一個(gè)渲染樹(render tree)。這個(gè)渲染樹和DOM樹的不同之處在于,它是受樣式影響的。它不包括那些不可見的節(jié)點(diǎn)。

4.當(dāng)渲染樹生成之后,瀏覽器就會(huì)在屏幕上“畫”出所有渲染樹中的節(jié)點(diǎn)。

2. 什么情況下會(huì)觸發(fā)瀏覽器的repaint/reflow?

除了頁面在首次加載時(shí)必然要經(jīng)歷該過程之外,還有以下行為會(huì)觸發(fā)這個(gè)行為:
引用:
1. DOM元素的添加、修改(內(nèi)容)、刪除( Reflow + Repaint)
2. 僅修改DOM元素的字體顏色(只有Repaint,因?yàn)椴恍枰{(diào)整布局)
3. 應(yīng)用新的樣式或者修改任何影響元素外觀的屬性
4. Resize瀏覽器窗口、滾動(dòng)頁面
5. 讀取元素的某些屬性(offsetLeft、offsetTop、offsetHeight、offsetWidth、 scrollTop/Left/Width/Height、clientTop/Left/Width/Height、 getComputedStyle()、currentStyle(in IE))

3. 怎么優(yōu)化?

1. 避免在document上直接進(jìn)行頻繁的DOM操作,如果確實(shí)需要可以采用off-document的方式進(jìn)行,具體的方法包括但不完全包括以下幾種:

引用:
1. 先將元素從document中刪除,完成修改后再把元素放回原來的位置
2. 將元素的display設(shè)置為”none”,完成修改后再把display修改為原來的值
3. 如果需要?jiǎng)?chuàng)建多個(gè)DOM節(jié)點(diǎn),可以使用DocumentFragment創(chuàng)建完后一次性的加入document

2. 集中修改樣式

引用:
       1. 盡可能少的修改元素style上的屬性
       2. 盡量通過修改className來修改樣式
       3. 通過cssText屬性來設(shè)置樣式值

3. 緩存Layout屬性值

引用:
       對(duì)于Layout屬性中非引用類型的值(數(shù)字型),如果需要多次訪問則可以在一次訪問時(shí)先存儲(chǔ)到局部變量中,之后都使用局部變量,這樣可以避免每次讀取屬性時(shí)造成瀏覽器的渲染。

4. 設(shè)置元素的position為absolute或fixed

引用:
       在元素的position為static和relative時(shí),元素處于DOM樹結(jié)構(gòu)當(dāng)中,當(dāng)對(duì)元素的某個(gè)操作需要重新渲染時(shí),瀏覽器會(huì)渲染整個(gè)頁 面。將元素的position設(shè)置為absolute和fixed可以使元素從DOM樹結(jié)構(gòu)中脫離出來獨(dú)立的存在,而瀏覽器在需要渲染時(shí)只需要渲染該元素 以及位于該元素下方的元素,從而在某種程度上縮短瀏覽器渲染時(shí)間,這在當(dāng)今越來越多的Javascript動(dòng)畫方面尤其值得考慮。

5. 權(quán)衡速度的平滑

引用:
       比如實(shí)現(xiàn)一個(gè)動(dòng)畫,以1個(gè)像素為單位移動(dòng)這樣最平滑,但reflow就會(huì)過于頻繁,CPU很快就會(huì)被完全占用。如果以3個(gè)像素為單位移動(dòng)就會(huì)好很多。

6. 不要用tables布局

引用:
       不要用tables布局的另一個(gè)原因就是tables中某個(gè)元素一旦觸發(fā)reflow就會(huì)導(dǎo)致table里所有的其它元素 reflow。在適合用table的場(chǎng)合,可以設(shè)置table-layout為auto或fixed,這樣可以讓table一行一行的渲染,這種做法也是為了限制reflow的影響范圍

7. 不要在css里面寫expression

引用:
       很多情況下都會(huì)觸發(fā)reflow,如果css里有expression,每次都會(huì)重新計(jì)算一遍

參考文章:

       1. 如何減少瀏覽器repaint和reflow
       2. Repaint, reflow/relayout, restyle
       3. Reflows & Repaints: CSS Performance making your JavaScript slow?
       4. Repaint 跟蹤瀏覽器的渲染[如果你的FF是3.5beta+監(jiān)聽網(wǎng)頁的重繪情況]

經(jīng)典論壇交流:http://bbs.blueidea.com/?3015796

本文鏈接:http://m.95time.cn/tech/web/2011/8365.asp 

出處:藍(lán)色理想
責(zé)任編輯:bluehearts

◎進(jìn)入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。

相關(guān)文章 更多相關(guān)鏈接
vs 2010:重構(gòu)完美代碼
重構(gòu)中的模塊化設(shè)計(jì):樣式的作用域
減少reflow
頁面重構(gòu)中的模塊化思維
影響reflow的因素及其優(yōu)化
作者文章
提升網(wǎng)站可用性的3個(gè)忠告
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設(shè)計(jì)比賽 網(wǎng)頁制作 web標(biāo)準(zhǔn) 用戶體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點(diǎn)最新 站點(diǎn)最新列表
周大!熬•自然”設(shè)計(jì)大賽開啟
國(guó)際體驗(yàn)設(shè)計(jì)大會(huì)7月將在京舉行
中國(guó)國(guó)防科技信息中心標(biāo)志征集
云計(jì)算如何讓安全問題可控
云計(jì)算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會(huì)
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅(jiān)的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計(jì)大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺(tái)歷
Ps簡(jiǎn)單繪制一個(gè)可愛的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡(jiǎn)單的作品展示頁面
CSS定位機(jī)制之一:普通流
25個(gè)最佳最閃亮的Eclipse開發(fā)項(xiàng)目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請(qǐng)不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

特別注意:本站所提供的攝影照片,插畫,設(shè)計(jì)作品,如需使用,請(qǐng)與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請(qǐng)與我們聯(lián)系,我們將立即刪除修改。

您的評(píng)論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評(píng)論。如果您不是本站會(huì)員,你可以注冊(cè) 為本站會(huì)員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯(cuò)誤,請(qǐng)用報(bào)告錯(cuò)誤,以利文檔及時(shí)修改。
不評(píng)分 1 2 3 4 5
注意:請(qǐng)不要在評(píng)論中含與內(nèi)容無關(guān)的廣告鏈接,違者封ID
請(qǐng)您注意:
·不良評(píng)論請(qǐng)用報(bào)告管理員,以利管理員及時(shí)刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國(guó)的各項(xiàng)有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評(píng)論管理人員有權(quán)保留或刪除其管轄評(píng)論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評(píng)論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評(píng)論文檔 | 報(bào)告錯(cuò)誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測(cè)試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設(shè)計(jì)之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設(shè)計(jì)》
犀利開發(fā)—jQuery內(nèi)核詳解與實(shí)踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2