方法链与创建不同变量对性能的影响
Performance impact of method chaining vs creating distinct variables
给定一组用于筛选数组并对结果进行约简/求和的操作:
function arbitrary() {
return [1,2,3].
filter((i)=>{return i > 1}).
reduce((prev,cur)=>{return prev+cur})
}
…我的假设是用filter的结果创建一个临时数组,并传递一个指针/引用给reduce。
如果用临时变量重写:
function arbitrary() {
var filtered = [1,2,3].filter((i)=>{return i > 1});
return filtered.reduce((prev,cur)=>{return prev+cur});
}
…假设变量在超出作用域时被垃圾收集,那么它在内存使用和性能方面是否相等?
澄清一下,我理解这可以被视为微优化,我并不是在问这是否是最佳实践。
这种级别的微优化很少值得修改您的代码。尽可能用最清晰的方式编写代码。我倾向于按照这个顺序来考虑这些编码优先级:正确、清晰、健壮、可重用、注释和适当的性能基本上就是这个顺序。由于这个问题的性能增量不太可能是相关的,而且它是最后一个优先级,那么在它之前出现的其他优先级应该指导思考。
如果你只是想知道内部发生了什么,你会发现可能没有什么不同。
当您运行.filter()
时,在您的任何一个代码示例中都会生成一个新的数组。
因此,两者之间的唯一区别是,在第二个代码示例中,您将其分配给临时变量,然后在该临时变量上调用.reduce()
。在第二个代码示例中没有生成新的数组,只是创建了一个额外的局部变量和一个额外的变量赋值。在函数中执行其他操作的一般方案中(特别是如果数组具有合理的大小),您将进行许多其他函数调用,因此这一个额外的变量赋值不太可能相关。
也就是说,如果中间值不需要用于其他任何东西,那么许多人会认为,由于不需要保留中间结果或对其赋值,甚至不需要拥有该变量,因此只需将结果链接起来,代码就会更简洁。
尽管如此,这并不是一个普遍的真理。捆绑并不总是更好的解决方案。有时,代码变得非常复杂,以至于将长而大的链式语句分解成一些命名的中间结果会使代码更容易理解,并且在某些情况下,更容易调试(因为更容易看到中间结果)。在您的特定代码中,一些链式操作看起来非常好,所以我个人不会使用中间变量。
- NodeJ中的注释会影响性能吗
- 设置1400个Raphael.js对象的不透明度动画会影响动画性能
- javascript getAttribute是否会影响性能或触发布局
- Coffeescript 隐式返回对性能和副作用的影响
- 行之间有空格会影响 JavaScript 代码的性能吗?
- 角度 1 路绑定不影响性能
- 数字精度如何影响 JavaScript 的性能,或者会影响性能
- ng-csp指令的性能影响
- 解除所有元素上的所有 jQuery 事件的性能影响
- Meteor 中的客户端渲染和光纤的性能影响
- 在计时器中持续访问 Cookie 的性能影响
- Node.js中未使用需求的性能影响
- Javascript-命名空间嵌套是否存在任何硬性限制(或性能影响)
- 对加载相关下拉列表的性能影响,最多约30000条记录
- 在一个应用程序中使用多个角度应用程序时的性能影响
- 1)对函数内部函数的性能影响2)多个条件下的顺序或流程
- KineticJS - KineticJS . node .listening()的性能影响
- 在Redux中切换到Immutable.js.性能影响是什么?对组件的影响是什么? '语法
- JavaScript base62编码的性能影响
- JavaScript对象文字表示法与普通函数及其性能影响