首頁  >  文章  >  web前端  >  JavaScript如何提升程式碼效能的用法匯總

JavaScript如何提升程式碼效能的用法匯總

伊谢尔伦
伊谢尔伦原創
2017-07-26 13:47:321234瀏覽

使用字串累加計算風格 

使用+運算會在記憶體中建立一個新的字串並將連接的值賦給它。只是將這個結果賦值給一個變數。
為了避免連結結果的中間變量,可以使用+=來直接賦值結果。

運行緩慢的程式碼: 

a += 'x' + 'y';

運行更快的程式碼: 

a += 'x'; a += 'y';


## 原操作會比函數呼叫快
可以考慮在效能要求關鍵的循環和函數中使用可以替代的原始操作。
執行緩慢的程式碼: 

var min = Math.min(a, b); 
arr.push(val);

執行更快的程式碼: 

var min = a < b ? a : b; 
arr[arr.length] = val;

設定setTimeout() 和setInterval() 時傳遞函數名稱而不是字串 

如果你傳遞一個字串到setTimeout() 或setInterval()中,字串將會被eval計算而導致緩慢。

使用一個匿名函數包裝來代替,這樣在編譯的時候就可以被解釋和最佳化。

運行緩慢的程式碼:


setInterval(&#39;doSomethingPeriodically()&#39;, 1000); 
setTimeOut(&#39;doSomethingAfterFiveSeconds()&#39;, 5000);

運行更快的程式碼: 

setInterval(doSomethingPeriodically, 1000); 
setTimeOut(doSomethingAfterFiveSeconds, 5000);

避免在物件中使用不需要的DOM參考 


不要這麼做: 

var car = new Object(); 
car.color = "red"; 
car.type = "sedan"

更好的一種形式:

var car = { 
color : "red"; 
type : "sedan" 
}

最清晰的目標速度,最小化作用域鏈結

 


低效率方法: 

var url = location.href;

一種高效率形式: 

var url = window.location.href;

試著在腳本中少使用註釋,避免使用長變數名
盡可能的保證註釋少或避免使用註釋,特別是在函數,循環以及數組中。
註解不必要的減緩腳本執行並且增加了檔案大小。例如: 

不建議的形式:


function someFunction() 
{ 
var person_full_name="somename"; /* stores the full name*/ 
}

更好的寫法: 

function someFunction() 
{ 
var name="somename"; 
}

在目前作用域儲存應用的外部變數


當一個函數被執行的運行上下問被穿件,一個活動的物件會包含所有局部變數會被推到上下文鏈的前面。

在作用域鏈中,最慢的是清楚的識別標識符,意味著局部變數是最快的。儲存頻繁使用的外部變數讀取和寫入都會明顯的加快。這對於全域變數和其他深層的標識符查找特別明顯。

同樣,在目前作用域中的變數(var myVar)比物件像屬性的存取速度快(this.myVar)。
運行緩慢的程式碼:

function doSomething(text) { 
var ps = document.getElementsByTagName(&#39;p&#39;), 
text = [&#39;foo&#39;, /* ... n ... */, &#39;bar&#39;]; 
for (var i = 0, l = ps.length; i < l; i++) { 
ps[i].innerHTML = text[i]; 
} 
}

運行更快的程式碼:

function doSomethingFaster(text) { 
var doc = document, 
ps = doc.getElementsByTagName(&#39;p&#39;), 
text = [&#39;foo&#39;, /* ... n ... */, &#39;bar&#39;]; 
for (var i = 0, l = ps.length; i < l; i++) { 
ps[i].innerHTML = text[i]; 
} 
}

如果你需要存取一個元素(如 head)在一個大的迴圈中,使用一個本地的DOM存取(如範例中的get)會更快。

運行更快的程式碼:

function doSomethingElseFaster() { 
var get = document.getElementsByTagName; 
for (var i = 0, i < 100000; i++) { 
get(&#39;head&#39;); 
} 
}


使用變數快取值

在做重複工作的地方使用局部變數快取值。

下面的一組例子顯示了儲存值到局部變數的廣泛意義。


範例1.計算執行前在循環體內使用變數儲存數學函數

錯誤的方法: 

var d=35; 
for (var i=0; i<1000; i++) { 
y += Math.sin(d)*10; 
}

更好的處理: 
var d = 55; 
var math_sind = Math.sin(d)*10; 
for (var i=0; i<1000; i++) { 
y += math_sind; 
}

例子2.保存數組的長度在循環中使用###糟糕的處理: ###數組的長度每次都會被重複計算 ###
for (var i = 0; i < arr.length; i++) { 
// do something 
}
###更好的改進:###更好的方法是保存陣列的長度 ###
for (var i = 0, len = arr.length; i < len; i++) { 
// do something 
}
###總的來說,如果已經做了一次,我們就不需要重複的來做不必要的工作。例如,作用域或函數中多次使用到計算的一個表達式的值,保存到變數可以使它多次被使用,否則我們會過頭的宣告一個變數並賦值然後只適用一次。所以請記住這些。 ############

以上是JavaScript如何提升程式碼效能的用法匯總的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn