iT邦幫忙

DAY 9
4

jQuery 套件開發之我可不可以跳著說系列 第 9

jQuery套件開發(九),了解reflow的概念。

畫面繪製需要成本。

你了解觸發的時機嗎?

怎麼改善呢? 進來坐坐吧^^

<文章列表>
IT人生組文章
--9/24 : 連鎖效應後的反思 - 瀏覽衝量十法
http://ithelp.ithome.com.tw/question/10129219
--9/23 : 半澤直樹 - 連鎖效應後的反思
http://ithelp.ithome.com.tw/question/10128966
--9/23 : 推薦大家看半澤直樹
http://ithelp.ithome.com.tw/question/10128756
--9/22 : 不要在電梯裡面討論HTML
http://ithelp.ithome.com.tw/question/10128407
--9/21 : IT人的人生觀
http://ithelp.ithome.com.tw/question/10128168

開發技術組文章
--9/24 : jQuery套件開發(九),了解reflow的概念
http://ithelp.ithome.com.tw/question/10129232
--9/23 : jQuery套件開發(八),怎麼樣把element 放進DOM中才好呢。
http://ithelp.ithome.com.tw/question/10128771
--9/22 : jQuery套件開發(七),實作套件。
http://ithelp.ithome.com.tw/question/10128406
--9/21 : jQuery套件開發(六),套件的整個流程的小構思。
http://ithelp.ithome.com.tw/question/10128176
--9/20 : jQuery套件開發(五),套件的定義
http://ithelp.ithome.com.tw/question/10127881

全列表
http://ithelp.ithome.com.tw/ironman6/player/sheephead081/alll/1
今天,我們把腳步放慢一點(…這句話好耳熟)

來了解一下reflow是甚麼意思。

大家都說DOM cost a lot

主因是因為你每次修改DOM瀏覽器都會重畫整個畫面。

這篇文章寫的不賴

http://www.nczonline.net/blog/2009/02/03/speed-up-your-javascript-part-4/

不負責引用…底下的情形會觸發reflow
1.When you add or remove a DOM node.
2.When you apply a style dynamically (such as element.style.width="10px").
3.When you retrieve a measurement that must be calculated, such as accessing offsetWidth, clientHeight, or
any computed CSS value (via getComputedStyle() in DOM-compliant browsers or currentStyle in IE),
while DOM changes are queued up to be made.
4.按F5( 喂! )

所以我們可以說,前端設計師很大的效能控管要來自於對DOM的了解、對reflow減少觸發的次數。

以下講述滿抽象的<-真的請前輩指正...

我覺得整個DOM 你可以想像是一個大海。

瀏覽器是一個繪製海面的立體圖的儀器,我們叫他Idraw好了。

所以當海底有甚麼東西浮出海面的時候,Idraw會去執行重新繪製也就是reflow

我們今天要在海面上作一個美麗的島嶼,島上有樹、有石頭、有動物。

為了減少reflow
我們最好把島嶼像樂高一樣拼好之後再一次浮出來。

而不是作好甚麼就先把甚麼東西浮在海面上。

另外一個觸動reflow的狀況就是

海面上有個海妖在吹嗩吶。你想用你的神力把嗩吶弄大一點、女妖頭髮改成金黃色(胸部也大一點)

你該作的事情不是下面這樣

海妖.style.嗩吶 = '200%';
海妖.style.髮色 = '金黃色' ;

因為你的每一次的指令送出,都會讓Idraw重新繪製,即便中間的時間差很小!

你應該要用class來控管海妖新外表。

class 
{
    嗩吶: ’200%’;
    髮色: ‘金黃色’ ;
}

海妖.classList.add('class'); or $(海妖).addClass('class') ;

如果你要作的改變是巨量的。

理論上你是應該要把這個元素移除掉

在海面下作好新的女妖之後再上架。

或是你可以利用jQuery的detach函式。

恩~明天就來實做看看吧~

讚喔!


上一篇
jQuery套件開發(八),怎麼樣把element 放進DOM中才好呢。
下一篇
jQuery套件開發(十),element放入DOM相關速度測試。
系列文
jQuery 套件開發之我可不可以跳著說26

尚未有邦友留言

立即登入留言