javascript – 未定义参数的性能损失

前端之家收集整理的这篇文章主要介绍了javascript – 未定义参数的性能损失前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我经常在函数中有可选参数,但是一些测试在Firefox和safari(70-95%)中显示出巨大的性能.奇怪的是,如果我传递文字值未定义,那么没有罚款.这里可能发生什么?我不会认为这是一个范围链的问题,因为它们本身就是本地的功能.我是否开始通过未定义的每个可选参数?

jsPerf:http://jsperf.com/function-undefined-args/2

解决方法

对于这样的功能
function threeArgs(x,y,z) {
  return x + y + z;
}

这就是所谓的:

threeArgs(1,2,3);

优化器可以自由选择生成任何代码.它很容易确定没有副作用,因为函数只是引用其参数值并返回一个简单的表达式的结果.由于返回值被忽略,所以运行时没有任何理由去做任何事情.

除此之外,如果代码是:

something += threeArgs(1,3);

优化器可能会决定生成大致相当于以下内容代码

something += 6;

为什么?因为这个调用是用数字常量进行的,它可以安全地折叠代码生成时间.这可能是保守的,因为数字是奇怪的,但在这里它们都是整数,所以它可以做到这一点.即使没有,它可以安全地排列功能

something += 1 + 2 + 3;

然而,当有一个参数丢失时,可能是优化器保释并生成一个真正的函数调用.对于这样一个简单的功能,函数调用的开销很容易解释性能差异很大.

通过在测试中使用变量而不是常量,并且通过实际使用函数的返回值,您可以“混淆”优化器,并使其不会跳过调用或预先计算结果,但是不能将其保留内联.我仍然认为你的结果是有趣的,因为这个原因:它揭示了(从今天起),这些优化器对调用函数的方式很敏感.

猜你在找的JavaScript相关文章