成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

《高性能javascript》隨記 - DOM Scripting

Ryan_Li / 2123人閱讀

摘要:操作的代價(jià)非常昂貴,對(duì)元素節(jié)點(diǎn)的訪問和修改樣式布局的改變以及事件的綁定都影響著網(wǎng)頁的性能。所以,盡量減少對(duì)布局信息的查詢次數(shù),并用局部變量參與計(jì)算。當(dāng)動(dòng)畫結(jié)束時(shí),重新定位,從而只一次下移文檔其他元素的位置。這樣可以最小化事件句柄數(shù)量。

  

DOM操作的代價(jià)非常昂貴,對(duì)元素節(jié)點(diǎn)的訪問和修改、樣式、布局的改變以及DOM事件的綁定都影響著網(wǎng)頁的性能。

批量修改DOM

如果要對(duì)元素節(jié)點(diǎn)進(jìn)行多次讀寫,那么最好的方式是:把多次操作在DOM節(jié)點(diǎn)樹外統(tǒng)一處理好,然后再一次性更新DOM節(jié)點(diǎn)樹,具體的方法大致包含下面幾種。

先隱藏要操作的元素節(jié)點(diǎn),然后對(duì)這些節(jié)點(diǎn)進(jìn)行操作,最后再顯示出來。

先克隆要操作的元素節(jié)點(diǎn),然后對(duì)克隆出來的節(jié)點(diǎn)進(jìn)行操作,最后覆蓋原來的元素節(jié)點(diǎn)。

在文檔外創(chuàng)建并更新一個(gè)文檔片段(createDocumentFragment()),然后在附加在原始節(jié)點(diǎn)上。

緩存信息布局

瀏覽器通過隊(duì)列化修改和批量運(yùn)行的方法,盡量減少重排版的次數(shù)。當(dāng)你查詢布局信息(如偏移量、滾動(dòng)條位置、風(fēng)格屬性)的時(shí)候,瀏覽器將會(huì)刷新隊(duì)列并執(zhí)行所有修改操作,以返回最新的數(shù)值。所以,盡量減少對(duì)布局信息的查詢次數(shù),并用局部變量參與計(jì)算。

將元素提出動(dòng)畫流

重排版有時(shí)只影響渲染樹的一小部分,但有時(shí)候也會(huì)是一大部分,下面這些步驟可以避免對(duì)大部分頁面進(jìn)行重排版:

對(duì)動(dòng)畫元素使用絕對(duì)定位,使他脫離頁面布局流。

啟動(dòng)元素動(dòng)畫。當(dāng)它擴(kuò)大時(shí)會(huì)覆蓋部分頁面。

當(dāng)動(dòng)畫結(jié)束時(shí),重新定位,從而只一次下移文檔其他元素的位置。

事件托管

當(dāng)一個(gè)頁面存在大量的元素,并且很多元素都有一個(gè)或多個(gè)事件綁定的時(shí)候,會(huì)影響頁面的性能,這個(gè)時(shí)候才用事件托管機(jī)制可以提升頁面的運(yùn)行性能:你只需要監(jiān)聽事件,看看他們是不是你感興趣的元素發(fā)出的。這樣可以最小化事件句柄數(shù)量。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85249.html

相關(guān)文章

  • 性能javascript隨記 - Loading and Excecution

    摘要:此過程中,頁面的解析與用戶的交互都是阻塞的。非阻塞腳本延時(shí)腳本可以給標(biāo)簽添加一個(gè)屬性,這個(gè)屬性表明元素中的腳本不打算修改,因此代碼可以稍后執(zhí)行。此技術(shù)的重點(diǎn)在于無論在何處啟動(dòng)下載,腳本的下載和運(yùn)行都不會(huì)阻塞頁面的處理過程。 當(dāng)瀏覽器遇到標(biāo)簽時(shí),頁面的加載、介些都會(huì)停下來,運(yùn)行此javascript代碼,然后再繼續(xù)加載。這種事情同樣會(huì)發(fā)生在那些以src屬性調(diào)用的外部腳本,瀏覽器首先下載外...

    DevTTL 評(píng)論0 收藏0
  • 性能javascript隨記 - Data Access

    摘要:內(nèi)部屬性包含一個(gè)函數(shù)被創(chuàng)建的作用域中的對(duì)象的集合,此集合被稱為函數(shù)的作用域鏈。當(dāng)作用域鏈銷毀時(shí),激活對(duì)象一同被銷毀。下圖展示了函數(shù)運(yùn)行期上下文的作用域和閉包由于閉包的屬性包含與運(yùn)行期上下文作用域鏈相同的對(duì)象引用,會(huì)產(chǎn)生副作用。 javascript按照數(shù)據(jù)存儲(chǔ)位置的不同可分為以下四類: 直接量(字符串、數(shù)字、布爾型、Object、Array、Function、正則表達(dá)式、NULL以...

    fai1017 評(píng)論0 收藏0
  • JavaScript·摘抄·隨記(持續(xù)補(bǔ)充中)

    摘要:無主題,內(nèi)容為感觸較深的一些答疑探討等,摘自多篇文章,侵刪為什么是單線程的單線程,與它的用途有關(guān)。作為瀏覽器腳本語言,的主要用途是與用戶互動(dòng),以及操作。這決定了它只能是單線程,否則會(huì)帶來很復(fù)雜的同步問題。摘自運(yùn)行機(jī)制詳解再談作者阮一峰 無主題,內(nèi)容為感觸較深的一些答疑、探討等,摘自多篇文章,侵刪 1、為什么JavaScript是單線程 JavaScript的單線程,與它的用途有關(guān)。作...

    young.li 評(píng)論0 收藏0
  • JavaScript·隨記 Null vs. Undefined

    摘要:剛學(xué)了一些的基礎(chǔ)語法,試著用一下。相關(guān)文檔基本語法配合基本使用相同點(diǎn)和都是的基本數(shù)據(jù)類型擴(kuò)展的種基本數(shù)據(jù)類型和都是值擴(kuò)展的種值空字符串不同點(diǎn)可見代表變量有值,值為空且該值是通過變量賦值獲得的代表聲明了變量,但沒有為其賦值。 剛學(xué)了一些 Markdown 的基礎(chǔ)語法,試著用一下。 相關(guān)文檔:Markdown基本語法配合基本使用 相同點(diǎn): null 和 undefined 都是js...

    Tychio 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<