1. 程式人生 > >使用createDocumentFragment()方法---減少迴流,提高效能

使用createDocumentFragment()方法---減少迴流,提高效能

在《javascript高階程式設計》一書的6.3.5:建立和操作節點一節中,介紹了幾種動態建立html節點的方法,其中有以下幾種常見方法:

· crateAttribute(name):        用指定名稱name建立特性節點

· createComment(text):       建立帶文字text的註釋節點

· createDocumentFragment():    建立文件碎片節點

· createElement(tagname):       建立標籤名為tagname的節點

· createTextNode(text):         建立包含文字text的文字節點

其中最感興趣且以前沒有接觸過的一個方法是createDocumentFragment()方法,書中介紹說:在更新少量節點的時候可以之間向document.body節點中新增,但是當要向document中新增大量資料是,如果諸葛新增這些新節點,這個過程非常緩慢,因為每新增一個節點都會呼叫父節點的appendChild()方法,為了解決這個問題,可以使用一個文件碎片,把所有的新節點附加其上,然後把文件碎片一次性新增到document中。

加入想建立十個段落,使用常規的方式可能會寫出這樣的程式碼:

?
1 2 3 4 5 6 for(var i = 0 ; i < 10; i ++) {
var p = document.createElement("p"); var oTxt = document.createTextNode("段落" + i); p.appendChild(oTxt); document.body.append(p); }

當然,這段程式碼執行是沒有問題,但是他呼叫了十次document.body.appendChild(),每次都要產生一次頁面渲染。這時碎片就十分有用了:

?
1 var oFragment = document.createDocumentFragment();
?
1 2 3 4 5 for(var i = 0 ; i < 10; i ++) { var p = document.createElement("p"); var oTxt = document.createTextNode("段落" + i); p.appendChild(oTxt); oFragment.append(p);<br>}
?
1 <pre class="brush:javascript;gutter:true;">document.body.appendChild(pFragment);</pre>

在這段程式碼中,每個新的<p />元素都被新增到文件碎片中,然後這個碎片被作為引數傳遞給appendChild()。這裡對appendChild()的呼叫實際上並不是把文件碎片本省追加到body元素中,而是僅僅追加碎片中的子節點,然後可以看到明顯的效能提示,document.body.appenChild()一次替代十次,著一位著只需要進行一個內容渲染重新整理。

相關推薦

使用createDocumentFragment()方法---減少迴流提高效能

在《javascript高階程式設計》一書的6.3.5:建立和操作節點一節中,介紹了幾種動態建立html節點的方法,其中有以下幾種常見方法: · crateAttribute(name):        用指定名稱name建立特性節點 · createComment(

Java 垃圾回收機制(以及怎麼減少呼叫GC提高效能

 綜合了若干人的blog~ 1. 垃圾回收的意義  在C++中,物件所佔的記憶體在程式結束執行之前一直被佔用,在明確釋放之前不能分配給其它物件;而在Java中,當沒有物件引用指向原先分配給某個物件的記憶體時,該記憶體便成為垃圾。JVM的一個系統級執行緒會自動釋放該記憶體

Java高併發(五)——Lock優化提高效能

       前邊我們講了,多執行緒的世界,多執行緒的基礎操作,多執行緒協作,多執行緒管理——執行緒池。其中多執行緒為什麼麻煩,就因為執行緒並行操作,對共享資源的爭奪,會出現執行緒安全問題。而我們解決執行緒安全問題的方案是同步(鎖資源,序列使用),序列就會出現

java中的方法能重寫效能重寫嗎?

覆寫是多型的一種表現,我們平時所說的覆寫一般是針對方式來說,在網上看到過有人討論試著覆寫屬性,於是有點興趣,屬性真能覆寫嗎?回答問題之前,我們還是回憶一下方法的覆寫具備哪些條件,或都說哪些方法能覆寫。 先回顧一下方法覆寫要注意的地方: 1、過載(也叫過載)時只與方法特徵有關,但重寫(覆寫)是會進一步檢查兩個方

with as 和group by 代替 count distinct提高效能

資料庫:postgresql 背景:使用distinct在對某張表某個欄位做去重統計的時候,發現有統計特別慢(30-40s),當前表大小是400w,distinct 後大概60w sql 很簡單(出於安全考慮,欄位和表名稱都做了替換): 原sql: select count

方法能重寫效能重寫嗎?

覆寫是多型的一種表現,我們平時所說的覆寫一般是針對方式來說,在網上看到過有人討論試著覆寫屬性,於是有點興趣,屬性真能覆寫嗎?回答問題之前,我們還是回憶一下方法的覆寫具備哪些條件,或都說哪些方法能覆寫。先回顧一下方法覆寫要注意的地方:1、過載(也叫過載)時只與方法特徵有關,但重寫(覆寫)是會進一步檢查兩個方法

減少與數據庫的連接提高請求效率

數據庫連接工時系統代碼優化記錄:在查看工時詳情的時候,我們需要將個人的工時分項目,每月進行一個展示。一年有12個月,一個人有多個項目。初始代碼只是為了實現功能,所以在代碼中進行的循環操作,即每個項目每月到數據庫中獲取該用用戶的工時統計。這樣就造成了多次請求數據庫,強求效率很低。差不多查詢一次要2500ms的時

使用多結果集讀取數據減少服務器往返提高性能

ive resultset multipl his sets 只讀 ade grid 填充 先來談一下什麽是多結果集?以及為什麽需要它? 假設我們的一個窗體上有多個控件,需要綁定多個數據源。那麽傳統情況下,我們可以用不同的命令去讀取不同的數據,然後分別綁定。這樣做本來無可厚

5個方法告訴你如何提高面試通過率

今天,解優君來和大家分享一下,如何提高面試通過率,看能否給到你一些啟發。 面試的時候,我們在考察什麼 按照結構化面試的邏輯,一個完整的面試考察應該包括三個部分: 1、崗位勝任能力的考察 包括知識、技能以及核心勝任力的考察,拿一個HR的崗位來舉例: 所需知識:人力資源基礎知識、勞動法律法規

WebDriverWait智慧等待查詢元素提高程式碼的執行效率不浪費時間減少程式碼量

from selenium.webdriver.support.wait import WebDriverWait智慧等待10s之後獲取元素,獲取的是單個元素def find_element(self, locator):WebDriverWait(self.driver, 10).until(lambda

WebDriverWait智能等待查找元素提高代碼的執行效率不浪費時間減少代碼量

Locator ret 智能 code until rom self. ive 單個 from selenium.webdriver.support.wait import WebDriverWait智能等待10s之後獲取元素,獲取的是單個元素def find_elemen

LSM樹——犧牲大部分讀的效能提高寫的能力

LSM樹(Log-Structured Merge Tree)儲存引擎 代表資料庫:nessDB、leveldb、hbase,kudu等 核心思想的核心就是放棄部分讀能力,換取寫入的最大化能力。LSM Tree ,這個概念就是結構化合並樹的意思,它的核心思路其實非常簡單,就是假定記憶體足夠大

減少亞穩態導致錯誤提高系統的MTBF

1.亞穩態與設計可靠性 設計數位電路時大家都知道同步是非常重要的,特別當要輸入一個訊號到一個同步電路中,但是該訊號由另一個時鐘驅動時,這是要在介面處採取一些措施,使輸入的非同步訊號同步化,否則電路將無法正常工作,因為輸入端很可能出現亞穩態(Metastability),導致

編輯軟體介紹(提高效率減少加班讓你幸福穩穩地)

 詩東我是一個碼農,我上班就想下班,星期一就想放假,但是加班這X事是誰都逃不過的,就是多少的問題,詩東我很恨那種宣傳加班正面化這種X事,比如你星期天本來可以在家裡看場球場,想了想你領導安排事情沒有做完,要你下星期一交,然後你回去加班,同時照了你的相片之後,發朋友圈,說你加班你自願的,說你工

CSS 優化、提高效能方法有哪些?

CSS優化主要是4個方面: 載入效能 主要是從減少檔案體積,減少阻塞載入,提高併發方面入手 選擇器效能 渲染效能 可維護性 較為具體的優化方案: 慎重使用高性屬性:浮動、定位; 去除空規則; 屬性值為0時,不加單位; 屬性值為浮點數0.**時

拯救你的專注力提高生產效率的終極方法沒有之一!!!

小夥伴們,你們是不是跟我一樣每天把大量時間花在刷微信微博看短視訊上無法專注?是不是跟我一樣在數字化生存的年代發現時間都被碎片化了?如果與我一樣的症狀,請做三個深呼吸睜大眼睛往下讀!!!對於拯救專注力提高生產效率,最行之有效的方法(沒有之一),就是番茄工作法。關於這個方法的介紹

#define 巨集函式為什麼能夠提高效能

#define S(a,b) a*b //正確的巨集定義是#define S(r) ((r)*(r)) area=S(3,2);第一步被換為area=a*b; ,第二步被換為area=3*2; 類似於函式呼叫,有一個啞實結合的過程: 預處理(預編譯)工作也

22 mysql有那些”飲鴆止渴”提高效能方法

22 mysql有那些”飲鴆止渴”提高效能的方法? 正常的短連線模式是連線到資料庫後,執行很少的SQL語句就斷開,下次需要的時候再重新連線。如果使用的是短連線,在業務高峰期的時候,就可能出現連線數突然暴漲的情況。 Mysql建立連線的過程,成本是很高的,除了正常的網路連線的3次握手外,還需要做登入許可權判

前端優化:9 個技巧提高 Web 效能

1. 清理 HTML 文件 HTML,即超文字標記語言,幾乎是所有網站的支柱。HTML 為網頁帶來標題、子標題、列表和其它一些文件結構的格式。在最近更新的 HTML5 中,甚至可以建立圖表。 HTML 很容易被網路爬蟲識別,因此搜尋引擎可以根據網站的內容在一定程度上實時更

使用Guava+Spring實現非同步回撥操作提高程式效能

             隨著移動網際網路的蓬勃發展,手機App層出不窮,其業務也隨之變得錯綜複雜。針對於開發人員來說,可能之前的一個業務只需要調取一次第三方介面以獲取資料,而如今隨著需求的增加,該業務需調取多個不同的第三方介面。通常,我們處理方法是讓程式碼同步順序的去調取這些介面。顯然,調取介面數量的增加