箭头函数是否像命名函数一样进行了优化?
我在观看NodeJS
Interactive谈话时,那个家伙在说匿名函数的性能很差,原因之一是,如果它们没有名称,VM便无法根据使用频率来优化该函数,因为它没有名字。
因此,如果一个具有名称的函数被调用
random.Async('Blah', function randomFunc() {});
randomFunc 可以优化为以下功能:
random.Async('Blah', function(cb) {});
由于它是匿名的,无名的,因此不会进行优化。
所以我想知道箭头函数是否会做同样的事情,因为我认为您不能命名箭头函数。
将
random.Async('Blah', (cb) => {}); 被优化?
编辑:寻找该人提及此话题的谈话链接,将向您报告。(这篇演讲是从前一段时间开始的,只是我从中想起的东西)
编辑找到视频:https :
//youtu.be/_0W_822Dijg?t=299
回答:
注意:不能完全确定这些是链接视频演示中讨论的模式比较。
在10000次迭代中,命名功能似乎在铬下的V8实现中完成最快。Arrow function似乎比匿名函数在更短的时间内返回结果。
在100000次迭代中,匿名函数在最短的时间内完成;64.51ms少于命名函数,而箭头函数比命名函数花费4902.01ms更多的时间。
    var len = Array.from({      length: 100000
    })
     // named function
    function _named() {
      console.profile("named function");
      console.time("named function");
      function resolver(resolve, reject) {
        resolve("named function")
      }
      function done(data) {
        console.log(data)
      }
      function complete() {
        console.timeEnd("named function");
        console.profileEnd();
        return "named function complete"
      }
      function callback() {
        return new Promise(resolver).then(done)
      }
      return Promise.all(len.map(callback)).then(complete);
    }
     // anonymous function
    function _anonymous() {
      console.profile("anonymous function");
      console.time("anonymous function");
      return Promise.all(len.map(function() {
          return new Promise(function(resolve, reject) {
              resolve("anonymous function")
            })
            .then(function(data) {
              console.log(data)
            })
        }))
        .then(function() {
          console.timeEnd("anonymous function");
          console.profileEnd();
          return "anonymous function complete"
        })
    }
     // arrow function
    function _arrow() {
      console.profile("arrow function");
      console.time("arrow function");
      return Promise.all(len.map(() => {
          return new Promise((resolve, reject) =>
              resolve("arrow function")
            )
            .then((data) => {
              console.log(data)
            })
        }))
        .then(() => {
          console.timeEnd("arrow function");
          console.profileEnd();
          return "arrow function complete"
        })
    }
    _named().then(_anonymous).then(_arrow)
jsfiddle https://jsfiddle.net/oj87s38t/
以上是 箭头函数是否像命名函数一样进行了优化? 的全部内容, 来源链接: utcz.com/qa/407246.html


