使用字串累加計算風格
使用+運算會在記憶體中建立一個新的字串並將連接的值賦給它。只是將這個結果賦值給一個變數。
為了避免連結結果的中間變量,可以使用+=來直接賦值結果。
運行緩慢的程式碼:
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() 時傳遞函數名稱而不是字串
使用一個匿名函數包裝來代替,這樣在編譯的時候就可以被解釋和最佳化。
setInterval('doSomethingPeriodically()', 1000); setTimeOut('doSomethingAfterFiveSeconds()', 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('p'), text = ['foo', /* ... n ... */, 'bar']; for (var i = 0, l = ps.length; i < l; i++) { ps[i].innerHTML = text[i]; } }
function doSomethingFaster(text) { var doc = document, ps = doc.getElementsByTagName('p'), text = ['foo', /* ... n ... */, 'bar']; for (var i = 0, l = ps.length; i < l; i++) { ps[i].innerHTML = text[i]; } }
運行更快的程式碼:
function doSomethingElseFaster() { var get = document.getElementsByTagName; for (var i = 0, i < 100000; i++) { get('head'); } }
使用變數快取值
在做重複工作的地方使用局部變數快取值。
範例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; }
for (var i = 0; i < arr.length; i++) { // do something }
for (var i = 0, len = arr.length; i < len; i++) { // do something }
以上是JavaScript如何提升程式碼效能的用法匯總的詳細內容。更多資訊請關注PHP中文網其他相關文章!