2017-10-19 93 views
0

我一直在ES6一段時間的實驗現在和我有一個問題關於方法.bind(this)與新的箭頭函數相比的性能。是箭頭函數比綁定方法更快通過此參數

我想知道在使用.bind(this)傳統功能方面是否有任何性能改進,或者是否對用戶箭頭功能以及爲什麼更好。

我做了下面的測試,但我不確定爲什麼每次執行測試時都會得到不同的值。

function useBind() { 
    if(this && this.i) { 
     console.log(this.i); 
    } 
} 

const noBind =() => { 
    if(this && this.i) { 
     console.log(this.i); 
    } 
} 

function goFat() { 
    this.i = 10; 
    for (var i = 0; i < 100; i++) { 
     noBind(); 
    } 
} 

function goTraditional() { 
    this.i = 20; 
    for (var i = 0; i < 100; i++) { 
     useBind.bind(this)(); 
    } 

} 

function race() { 
    var start = performance.now(); 
    goTraditional(); 
    console.log('Traditional elapsed: ' + (performance.now() - start)); 
    start = performance.now(); 
    goFat() 
    console.log('Fat elapsed: ' + (performance.now() - start)); 

    start = performance.now(); 
    goTraditional(); 
    console.log('Traditional elapsed: ' + (performance.now() - start)); 
    start = performance.now(); 
    goFat() 
    console.log('Fat elapsed: ' + (performance.now() - start)); 

    start = performance.now(); 
    goTraditional(); 
    console.log('Traditional elapsed: ' + (performance.now() - start)); 
    start = performance.now(); 
    goFat() 
    console.log('Fat elapsed: ' + (performance.now() - start)); 
    console.log('------'); 
} 

對不起,如果這個問題是重複或有其他類似的話題,但我不能找到一個具體的答案,直到現在。

+3

'useBind.bind(this); useBind();' - 這不是''bind'如何工作。 – Bergi

+0

你試圖做的事是什麼,是如此的性能關鍵? –

+1

您是否關心調用的性能或創建函數對象的性能? – Bergi

回答

2

由於您的運行時間由console.log()的調用支配,因此您會得到不同的結果。如果你在內循環中做了如console.log()這樣的強化,你調用它們的方式不會影響你的運行時間。

一般來說,你不應該關心微觀優化,直到你知道你需要它爲止。使用適合情況的風格。如果您可以使用箭頭功能,請使用它們。與bind相反,它們避免了創建新的函數對象。

如果您想實際調用綁定函數(而不是useBind.bind(this); useBind()),那麼您的測試必須重寫useBind.bind(this)()。如果你關心性能,你可以在循環之外進行綁定。除非你想測量創建綁定函數的影響。

相關問題