日期:2013-6-19 來源:GBin1.com javascript
我 們的瀏覽器執行愈來愈多的特性,而且網絡逐漸向移動設備轉移,使咱們的前端代碼更加緊湊,如何優化,就變得愈來愈重要了。前端給力的地方是能夠有 許多種簡單的策略和代碼習慣讓咱們能夠保證最理想的前端性能。咱們這個系列的主題就是要告訴你9種代碼小技巧,只須要一分鐘,就能夠優化你現有的代碼。 html
DOM操做在瀏覽器上是要付稅的。儘管性能提高是在瀏覽器,DOM很慢,若是你沒有注意到,你可能會察覺瀏覽器運行很是的慢。這就是爲何減小建立集中的DOM節點以及快速注入是那麼的重要了。 前端
如今假設咱們頁面中有一個<ul>元素,調用AJAX獲取JSON列表,而後使用JavaScript更新元素內容。一般,程序員會這麼寫: java
var list = document.querySelector('ul'); ajaxResult.items.forEach(function(item) { // 建立<li>元素 var li = document.createElement('li'); li.innerHTML = item.text; // <li>元素常規操做,例如添加class,更改屬性attribute,添加事件監聽等 // 迅速將<li>元素注入父級<ul>中 list.apppendChild(li); });
上面的代碼實際上是一個錯誤的寫法,將<ul>元素帶着對每個列表的DOM操做一塊兒移植是很是慢的。若是你真的想要 使用document.createElement,而且將對象當作節點來處理,那麼考慮到性能問題,你應該使用DocumentFragement。 程序員
DocumentFragement 是一組子節點的「虛擬存儲」,而且它沒有父標籤。在咱們的例子中,將DocumentFragement想象成看不見的<ul>元素,在 DOM外,一直保管着你的子節點,直到他們被注入DOM中。那麼,原來的代碼就能夠用DocumentFragment優化一下: ajax
var frag = document.createDocumentFragment();
ajaxResult.items.forEach(function(item) {
// 建立<li>元素
var li = document.createElement('li');
li.innerHTML = item.text;
// <li>元素常規操做
// 例如添加class,更改屬性attribute,添加事件監聽,添加子節點等
// 將<li>元素添加到碎片中
frag.appendChild(li);
}); ........
via Nelly@極客標籤 瀏覽器