中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

Javascript中的DOM速度優(yōu)化
來(lái)源:易賢網(wǎng) 閱讀:1062 次 日期:2015-04-22 11:17:56
溫馨提示:易賢網(wǎng)小編為您整理了“Javascript中的DOM速度優(yōu)化”,方便廣大網(wǎng)友查閱!

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

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

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

方案一:通過(guò)CSS類名切換來(lái)修改DOM

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

需求:

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

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

function selectAnchor(element) { element.style.fontWeight = 'bold'; element.style.textDecoration = 'none'; element.style.color = '#000'; } 解決方案

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

.selectedAnchor { font-weight: bold; text-decoration: none; color: #000; } function selectAnchor(element) { element.className = 'selectedAnchor'; } 方案二:在非渲染區(qū)修改DOM

(emu注:作者在這里再次腦子短路,把DocumentFragment DOM Generation模式的介紹提前到這里來(lái)了,emu只好再次發(fā)揮一下)

上一個(gè)方案解決的是修改一個(gè)超鏈接的問(wèn)題,當(dāng)一次需要對(duì)很多個(gè)超鏈接進(jìn)行相同修改的時(shí)候,這個(gè)方案就可以大顯身手了。

需求

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

function updateAllAnchors(element, anchorClass) { var anchors = element.getElementsByTagName('a'); for (var i = 0, length = anchors.length; i < length; i ++) { anchors[i].className = anchorClass; }}解決方案

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

function removeToInsertLater(element) { var parentNode = element.parentNode; var nextSibling = element.nextSibling; parentNode.removeChild(element); return function() { if (nextSibling) { parentNode.insertBefore(element, nextSibling); } else { parentNode.appendChild(element); } };}有了上面這個(gè)函數(shù),現(xiàn)在我們就可以在一個(gè)不需要解析渲染的元素上面修改那些超鏈接了。這樣只在移除和插入元素的時(shí)候各觸發(fā)一次重解析。

function updateAllAnchors(element, anchorClass) { var insertFunction = removeToInsertLater(element); var anchors = element.getElementsByTagName('a'); for (var i = 0, length = anchors.length; i < length; i ++) { anchors[i].className = anchorClass; } insertFunction();}方案三:一次性的DOM元素生成

這個(gè)方案讓我們創(chuàng)建一個(gè)元素的過(guò)程只觸發(fā)一次重解析。在創(chuàng)建完元素以后,先進(jìn)行所有需要的修改,最后才把它插入到DOM里面去就可以了

需求

需求是這樣的,實(shí)現(xiàn)一個(gè)函數(shù),往一個(gè)指定的父元素上插入一個(gè)超鏈接元素。這個(gè)函數(shù)要同時(shí)可以設(shè)置這個(gè)超鏈接的顯示文字和樣式類。我們可以這樣做:創(chuàng)建元素,插入到DOM里面,然后設(shè)置相應(yīng)的屬性。這就要觸發(fā)3次重解析。

function addAnchor(parentElement, anchorText, anchorClass) { var element = document.createElement('a'); parentElement.appendChild(element); element.innerHTML = anchorText; element.className = anchorClass;}解決方案

很簡(jiǎn)單,我們只要把插入元素這個(gè)操作放到最后做,就可以只進(jìn)行一次重解析了。

function addAnchor(parentElement, anchorText, anchorClass) { var element = document.createElement('a'); element.innerHTML = anchorText; element.className = anchorClass; parentElement.appendChild(element);}不過(guò),要是我們想要插入很多個(gè)超鏈接到一個(gè)元素里面的話,那么這個(gè)做法還是有問(wèn)題:每插入一個(gè)超鏈接還是要觸發(fā)一次重解析。下一個(gè)方案可以解決這個(gè)問(wèn)題。

方案四:通過(guò)文檔片段對(duì)象(DocumentFragment)創(chuàng)建一組元素

這個(gè)方案允許我們創(chuàng)建并插入很多個(gè)元素而只觸發(fā)一次重解析。要實(shí)現(xiàn)這點(diǎn)需要用到所謂的文檔片段對(duì)象(DocumentFragment)。我們先在DOM之外創(chuàng)建一個(gè)文檔片段對(duì)象(這樣它也就不需要解析和渲染),然后我們?cè)谖臋n片段對(duì)象中創(chuàng)建很多個(gè)元素,最后我們把這個(gè)文檔片段對(duì)象中所有的元素一次性放到DOM里面去,只觸發(fā)一次重解析。

需求

我們要寫一個(gè)函數(shù),往一個(gè)指定的元素上面增加10個(gè)超鏈接。如果我們簡(jiǎn)單的直接插入10個(gè)超鏈接到元素上面,就會(huì)觸發(fā)10次重解析。

function addAnchors(element) { var anchor; for (var i = 0; i < 10; i ++) { anchor = document.createElement('a'); anchor.innerHTML = 'test'; element.appendChild(anchor); }}解決方案

要解決這個(gè)問(wèn)題,我們要先創(chuàng)建一個(gè)文檔片段對(duì)象,然后把每個(gè)新創(chuàng)建的超鏈接都插入到它里面去。當(dāng)我們把文檔片段對(duì)象用appendChild命令插入到指定的節(jié)點(diǎn)時(shí),這個(gè)文檔片段對(duì)象的所有子節(jié)點(diǎn)就一起被插入到指定的元素里面,而且只需要觸發(fā)一次重解析。

function addAnchors(element) { var anchor, fragment = document.createDocumentFragment(); for (var i = 0; i < 10; i ++) { anchor = document.createElement('a'); anchor.innerHTML = 'test'; fragment.appendChild(anchor); } element.appendChild(fragment);}

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看腳本欄目
易賢網(wǎng)手機(jī)網(wǎng)站地址:Javascript中的DOM速度優(yōu)化
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報(bào)班

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲黄色一区| 91久久国产综合久久| 性欧美xxxx视频在线观看| 99在线热播精品免费99热| 亚洲激情在线播放| 亚洲欧美日本精品| 亚洲欧美国产毛片在线| 亚洲一区二区三区四区在线观看 | 99热这里只有精品8| aⅴ色国产欧美| 亚洲自拍偷拍福利| 亚洲高清不卡一区| 国产三级精品在线不卡| 在线观看91精品国产麻豆| 国产美女高潮久久白浆| 欧美va天堂| 亚洲美女一区| 亚洲国产成人av在线| 一本色道久久88综合日韩精品| 亚洲视频碰碰| 欧美激情性爽国产精品17p| 欧美视频专区一二在线观看| 欧美日韩在线另类| 国产精品嫩草久久久久| 欧美精品亚洲精品| 亚洲六月丁香色婷婷综合久久| 狂野欧美激情性xxxx| 欧美大胆a视频| 国产精品乱码人人做人人爱| 一区二区三区高清不卡| 日韩视频三区| 91久久国产综合久久| 日韩视频免费观看| 午夜精品国产| 国产精品mm| 亚洲天堂成人在线视频| 亚洲性色视频| 欧美一区二区日韩| 久久久999精品免费| 亚洲国产精品视频一区| 日韩视频久久| 亚洲图色在线| 美女被久久久| 国产视频一区免费看| 一区在线视频| 久久久久一区二区三区| 国产一区二区日韩精品| 亚洲免费中文字幕| 欧美午夜电影一区| 国产欧美日韩视频一区二区| 最新中文字幕亚洲| 中国女人久久久| 亚洲欧美日韩在线高清直播| 亚洲国产精品va在线看黑人动漫| 亚洲国产乱码最新视频 | 国外成人网址| 亚洲欧美视频| 国产精品蜜臀在线观看| 亚洲五月六月| 国产精品视频午夜| 午夜激情一区| 国产欧美精品一区| 欧美一区二区三区久久精品茉莉花| 国产精品永久入口久久久| 亚洲性图久久| 国产精品一区二区在线观看| 午夜精品久久久久久久男人的天堂| 国产精品乱码一区二区三区| 亚洲一区视频在线| 国产精品永久入口久久久| 欧美影院午夜播放| 国产综合在线视频| 快播亚洲色图| 亚洲人成在线影院| 欧美日在线观看| 亚洲免费在线视频| 国产在线精品自拍| 久久综合中文字幕| 日韩一级成人av| 国产精品视频你懂的| 久久久久久黄| 99国产麻豆精品| 国产视频久久久久久久| 欧美成人午夜视频| 亚洲免费一在线| 精品二区视频| 欧美午夜理伦三级在线观看| 欧美一区二区三区日韩| 在线国产精品一区| 欧美日韩综合精品| 久久国产夜色精品鲁鲁99| 亚洲国产精品久久| 欧美日韩一区三区四区| 久久久久久久久久久一区| 亚洲美女在线视频| 国产欧美精品va在线观看| 久久全球大尺度高清视频| 一区二区欧美亚洲| 国产一区二区三区免费不卡 | 欧美黄色一级视频| 性欧美18~19sex高清播放| 在线精品视频免费观看| 国产精品一区二区三区久久| 久久xxxx精品视频| 一本大道久久a久久精品综合| 国产无一区二区| 欧美麻豆久久久久久中文| 久久久久国色av免费观看性色| 一区二区三区视频在线播放| 国产一区二区丝袜高跟鞋图片 | 亚洲国产欧美不卡在线观看| 国产精品成av人在线视午夜片| 久热精品视频| 亚洲男同1069视频| 亚洲日本中文| 国产区在线观看成人精品| 欧美日韩一区二区精品| 狼人社综合社区| 欧美一区激情| 亚洲在线中文字幕| 亚洲最新色图| 最新中文字幕一区二区三区| 免费视频一区二区三区在线观看| 国产精品影视天天线| 亚洲欧洲一二三| 国产一区二区三区的电影| 久久国产欧美日韩精品| 韩国av一区二区三区在线观看| 欧美激情一区二区三区不卡| 久久婷婷影院| 玖玖在线精品| 久久尤物视频| 麻豆久久精品| 欧美激情精品| 欧美婷婷久久| 国产欧美一级| 黄色成人免费网站| 夜夜嗨一区二区三区| 亚洲欧洲三级| 日韩一级精品| 亚洲欧美一区二区原创| 久久精品视频99| 欧美激情一区在线| 欧美日韩亚洲成人| 国产农村妇女精品| 亚洲国产第一页| 老司机久久99久久精品播放免费| 欧美成人自拍| 国产精品嫩草99a| 亚洲国产小视频| 性做久久久久久久久| 欧美国产欧美亚州国产日韩mv天天看完整 | 小处雏高清一区二区三区| 久久久久久有精品国产| 欧美日韩在线影院| 亚洲国产成人porn| 老司机精品视频网站| 国产精品萝li| 亚洲一区二区高清视频| 欧美国产日本在线| 一区福利视频| 久久久国产精品一区二区三区| 欧美日韩一二三四五区| 亚洲欧洲午夜| 你懂的网址国产 欧美| 国产一区二区在线观看免费| 亚洲一区在线免费| 欧美色一级片| 亚洲天堂成人在线视频| 欧美丝袜一区二区| 一区二区三区日韩精品视频| 欧美国产视频日韩| 亚洲人成网站777色婷婷| 免费观看成人| 亚洲国产成人av好男人在线观看| 久久久成人网| 亚洲电影免费| 欧美日韩日日夜夜| 亚洲综合视频网| 狠狠综合久久| 欧美高清视频一区二区三区在线观看| 国产亚洲永久域名| 亚洲天堂第二页| 国产真实乱偷精品视频免| 欧美在线视频导航| 亚洲激情在线| 欧美日精品一区视频| 性做久久久久久久免费看| 亚洲片国产一区一级在线观看| 欧美激情中文字幕在线| 欧美精品www在线观看| 黄色欧美成人| 国产一区激情| 久久激情久久| 亚洲区一区二| 国产亚洲福利| 欧美三级免费| 久久青草久久| 欧美乱妇高清无乱码| 久久视频在线免费观看|