箭头函数是否像命名函数一样进行了优化?
我在观看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