在节点js中写入命名函数是否更高性能?

我正在开发一个节点js的应用程序。 我使用匿名函数进行callback。 然后我引用callbackhell.com网站,发现编写命名函数是编码的最佳方式。

但是当我开始用命名函数格式编写代码时,我的代码行数增加了,我的函数数量增加了。 为每个callback编写命名函数会更好吗?

性能明智哪个更好?

虽然你可以添加更多的代码行, 函数声明 最快的。 这尤其适用于多次调用相同function的情况。 防爆。 集合查找,数组迭代等…

使用Benchmark.js ,您可以快速查看差异。

☃ seth:~/Node/function-performance$ node test.js Anonymous x 121 ops/sec ±8.31% (64 runs sampled) Function Expression x 137 ops/sec ±5.25% (72 runs sampled) Function Declaration x 165 ops/sec ±0.84% (86 runs sampled) Fastest is Function Declaration 

这是使用下面的代码来testing:

 "use strict"; var Benchmark = require('benchmark') var suite = new Benchmark.Suite var stuff = [1,2,3,4,5,6,9,8,9,10,11,12,13,14,15]; var myEventHandler = function() { // do something }; function myEventHandler2() { // do something }; suite.add('Anonymous', function() { for (var i = 0; i < 10000; ++i) { stuff.forEach(function() { // do something }); } }) .add('Function Expression', function() { for (var i = 0; i < 10000; ++i) { stuff.forEach(myEventHandler); } }) .add('Function Declaration', function() { for (var i = 0; i < 10000; ++i) { stuff.forEach(myEventHandler2); } }) .on('cycle', function(e) { console.log(String(e.target)) }) .on('complete', function() { console.log('Fastest is ' + this.filter('fastest').pluck('name')) }) .run({ 'async': true }); 

浏览器也一样。

为了支持Zeeker的评论 – 如果你没有在给定的实例中多次运行这个函数,通常你可以使用匿名函数,但是在使用函数声明的时候,它可以清理你的调用。