欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

哪些方式可以實現(xiàn)加速JavascriptDOM操作優(yōu)化

本篇文章給大家分享的是有關(guān)哪些方式可以實現(xiàn)加速Javascript DOM操作優(yōu)化,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的龍山網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

你對加速Javascript DOM操作優(yōu)化的方法是否熟悉,在我們開發(fā)互聯(lián)網(wǎng)富應用(RIA)時,我們經(jīng)常寫一些javascript腳本來修改或者增加頁面元素,這些工作最終是DOM——或者說文檔對象模型——來完成的,而我們的實現(xiàn)方式會影響到應用的響應速度。

加速Javascript DOM操作優(yōu)化

在我們開發(fā)互聯(lián)網(wǎng)富應用(RIA)時,我們經(jīng)常寫一些javascript腳本來修改或者增加頁面元素,這些工作最終是DOM——或者說文檔對象模型——來完成的,而我們的實現(xiàn)方式會影響到應用的響應速度。

Javascript DOM操作會導致瀏覽器重解析(reflow),這是瀏覽器的一個決定頁面元素如何展現(xiàn)的計算過程。直接修改DOM,修改元素的CSS樣式,修改瀏覽器的窗口大小,都會觸發(fā)重解析。讀取元素的布局屬性比如offsetHeithe或者offsetWidth也會觸發(fā)重解析。重解析需要花費計算時間,因此重解析觸發(fā)的越少,應用就會越快。

Javascript DOM操作通常要不就是修改已經(jīng)存在的頁面上的元素,要不就是創(chuàng)建新的頁面元素。下面有兩種優(yōu)化方案,大致覆蓋了修改和創(chuàng)建DOM節(jié)點兩種方式,幫助你減少觸發(fā)瀏覽器重解析的次數(shù)。

方案一:通過CSS類名切換來修改DOM

這個方案讓我們可以一次性修改一個元素和它的子元素的多個樣式屬性而只觸發(fā)一次重解析。

需求:

(emu注:原文作者寫到這里的時候腦子顯然短路了一下,把后面的Out-of-the-flowDOMManipulation模式要解決的問題給擺到這里來了,不過從示范代碼中很容易明白作者真正想描述的問題,因此emu就不照翻原文了)

我們現(xiàn)在需要寫一個函數(shù)來修改一個超鏈接的幾個樣式規(guī)則。要實現(xiàn)很簡單,把這幾個規(guī)則對應的屬性逐一改了就好了。但是帶來的問題是,每修改一個樣式屬性,都會導致一次頁面的重解析。

functionselectAnchor(element){  element.style.fontWeight='bold';  element.style.textDecoration='none';  element.style.color='#000';  }

解決方案:

要解決這個問題,我們可以先創(chuàng)建一個樣式名,并且把要修改的樣式規(guī)則都放到這個類名上,然后我們給超鏈接添加上這個新類名,就可以實現(xiàn)添加幾個樣式規(guī)則而只觸發(fā)一次重解析了。這個模式還有個好處是也實現(xiàn)了表現(xiàn)和邏輯相分離。

.selectedAnchor{  font-weight:bold;  text-decoration:none;  color:#000;  }   functionselectAnchor(element){  element.className='selectedAnchor';  }

介紹了加速Javascript DOM操作優(yōu)化的方案一,下面來看一下方案二。

方案二:在非渲染區(qū)修改DOM

(emu注:作者在這里再次腦子短路,把DocumentFragmentDOMGeneration模式的介紹提前到這里來了,emu只好再次發(fā)揮一下)
上一個方案解決的是修改一個超鏈接的問題,當一次需要對很多個超鏈接進行相同修改的時候,這個方案就可以大顯身手了。

需求:

需求是這樣的,我們要寫一個函數(shù)來修改一個指定元素的子元素中所有的超鏈接的樣式名(className)屬性。要實現(xiàn)很簡單,我們可以通過遍歷每個超鏈接并且修改它們的樣式名來完成任務(wù)。但是帶來的問題就是,每修改一個超鏈接都會導致一次重解析。

functionupdateAllAnchors(element,anchorClass){  varanchors=element.getElementsByTagName('a');  for(vari=0,length=anchors.length;i<length;i++){  anchors[i].className=anchorClass;  }  }

解決方案:

要解決這個問題,我們可以把被修改的指定元素從DOM里面移除,再修改所有的超鏈接,然后在把這個元素插入回到它原來的位置上。為了完成這個復雜的操作,我們可以先寫一個可重用的函數(shù),它不但移除了這個DOM節(jié)點,還返回了一個把元素插回到原來的位置的函數(shù)。

/**  *Removeanelementandprovideafunction  thatinsertsitintoitsoriginalposition  *@paramelement{Element}Theelementtobetemporarilyremoved  *@return{Function}Afunctionthatinsertstheelementintoitsoriginalposition  **/  functionremoveToInsertLater(element){  varparentNode=element.parentNode;  varnextSibling=element.nextSibling;  parentNode.removeChild(element);  returnfunction(){  if(nextSibling){  parentNode.insertBefore(element,nextSibling);  }else{  parentNode.appendChild(element);  }  };  }

有了上面這個函數(shù),現(xiàn)在我們就可以在一個不需要解析渲染的元素上面修改那些超鏈接了。這樣只在移除和插入元素的時候各觸發(fā)一次重解析。

functionupdateAllAnchors(element,anchorClass){  varinsertFunction=removeToInsertLater(element);  varanchors=element.getElementsByTagName('a');  for(vari=0,length=anchors.length;i<length;i++){  anchors[i].className=anchorClass;  }  insertFunction();  }

以上就是哪些方式可以實現(xiàn)加速Javascript DOM操作優(yōu)化,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享名稱:哪些方式可以實現(xiàn)加速JavascriptDOM操作優(yōu)化
網(wǎng)站網(wǎng)址:http://chinadenli.net/article2/pgjpoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)手機網(wǎng)站建設(shè)網(wǎng)站制作微信小程序網(wǎng)站內(nèi)鏈網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設(shè)