是箭头函数比绑定方法更快通过此参数
问题描述:
我一直在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('------');
}
对不起,如果这个问题是重复或有其他类似的话题,但我不能找到一个具体的答案,直到现在。
答
由于您的运行时间由console.log()
的调用支配,因此您会得到不同的结果。如果你在内循环中做了如console.log()
这样的强化,你调用它们的方式不会影响你的运行时间。
一般来说,你不应该关心微观优化,直到你知道你需要它为止。使用适合情况的风格。如果您可以使用箭头功能,请使用它们。与bind
相反,它们避免了创建新的函数对象。
如果您想实际调用绑定函数(而不是useBind.bind(this); useBind()
),那么您的测试必须重写useBind.bind(this)()
。如果你关心性能,你可以在循环之外进行绑定。除非你想测量创建绑定函数的影响。
'useBind.bind(this); useBind();' - 这不是''bind'如何工作。 – Bergi
你试图做的事是什么,是如此的性能关键? –
您是否关心调用的性能或创建函数对象的性能? – Bergi