this指針和閉包那個性能更好?

測試代碼:
let obj = { key: 1 };
function func1 () { obj.key = 2;}
let func2 = function () { this.key = 2; }.bind(obj) ;
function test (func) {
for (let i = 0;i < 1000000; i++) func();
}

console.time('func1');
test(func1);
console.timeEnd('func1')

console.time('func2');
test(func2);
console.timeEnd('func2')

Paste_Image.png

我在 chrome 上執行了三次,結果是這樣的:
func1: 1.767ms
func2: 12.910ms

func1: 1.849ms
func2: 59.454ms

func1: 1.868ms
func2: 64.076ms

然后我把,fun1 和 fun2代碼對調 ,我再執行了三次,結果是這樣的:

func2: 57.897ms
func1: 9.906ms

func2: 61.492ms
func1: 9.527ms

func2: 58.168ms
func1: 9.356ms

我把循環擴大100倍,各執行3次,結果是這樣的:
func1: 72.744ms
func2: 4635.589ms

func1: 80.379ms
func2: 4278.594ms

func1: 73.979ms
func2: 4300.288ms

可以看出第一種性能好...原因是call,apply,bind這種綁定this的操作非常耗性能...

stack overflow 上列出的原因:為什么 bind() 比 閉包要慢(在 chrome 中慢,改成 nodejs 環境后,閉包性能低于 bind())的原因:
1、bind() 的算法比閉包以及 call() 和 apply() 要復雜;
2、bind() 在 v8 引擎的實現中采用了很多耗性能的函數,
綜上, bind() 性能低于閉包,但可讀性和可維護性要高出閉包很多。閉包雖然可讀性較差,但性能卻要比call,apply,bind這種綁定this的操作要好很多。

參考鏈接:
https://segmentfault.com/q/1010000005987591
http://stackoverflow.com/questions/17638305/why-is-bind-slower-than-a-closure

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容