【问题标题】:Are Arrow Functions faster than bind method to pass this param箭头函数是否比绑定方法更快地传递此参数
【发布时间】:2017-10-19 14:06:29
【问题描述】:

我已经用 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('------');
}

对不起,如果这个问题重复或有其他类似的主题,但我直到现在才找到具体的答案。

【问题讨论】:

  • useBind.bind(this); useBind(); - 这不是bind 的工作方式。
  • 您尝试做什么对性能如此重要?
  • 你关心调用的性能还是创建函数对象的性能?
  • useBind.bind(this); 需要在循环之前调用,也就是说你写了人为的性能泄漏情况
  • 我猜箭头函数对你来说更快...更少打字...

标签: javascript performance ecmascript-6 arrow-functions


【解决方案1】:

您会得到不同的结果,因为您的运行时间主要由对console.log() 的调用控制。如果您在内部循环中执行像 console.log() 这样密集的操作,那么您调用它们的方式不会影响您的运行时间。

一般来说,在您知道自己需要微优化之前,您不应该关心它。使用适合情况的样式。如果您可以使用箭头功能,请使用它们。它们避免创建新的函数对象,而不是 bind

如果您想实际调用绑定函数(而不是useBind.bind(this); useBind()),则必须重写您的测试useBind.bind(this)()。如果您关心性能,您将在循环之外进行绑定。除非您也想衡量创建绑定函数的影响。

【讨论】:

    猜你喜欢
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    相关资源
    最近更新 更多