使用字串累加計算風格
使用+運算會在記憶體中建立一個新的字串並將連接的值賦給它。只是將這個結果賦值給一個變數。
為了避免連結結果的中間變量,可以使用+=來直接賦值結果。
運行緩慢的程式碼:
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]; } }如果你需要存取一個元素(如 head)在一個大的迴圈中,使用一個本地的DOM存取(如範例中的get)會更快。
運行更快的程式碼:
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中文網其他相關文章!