箭头函数是否像命名函数一样进行了优化?

我在观看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

回到顶部