这是JavaScript优化吗?

时间:2012-11-06 13:17:32

标签: javascript v8 spidermonkey chakra

有人可以解释一下下面这两个函数之间有什么区别吗?

我想知道JavaScript引擎是否在这里进行某种纳米优化。

function withoutVar() {                                                                                                                   
  return 'stackoverflow';                                                                                                                    
}
function withVar() {
  var result = 'stackoverflow';
  return result;
}
var a = withoutVar();
var b = withVar();  

2 个答案:

答案 0 :(得分:7)

某些引擎可能会执行此类优化。 Google Closure compiler肯定会这样做:

function withVar(){return"stackoverflow"}var a=withVar();

速度几乎没有差异,但“优化”版本更短(因此客户端下载速度更快)。以下是a benchmark的结果:

enter image description here

你可以看到“平面”版本(没有变量声明)稍微快一些(但是看看每秒的操作 - 这是一个在速度方面甚至不值得考虑的优化)。

答案 1 :(得分:4)

不同之处在于,您的函数withVar会导致实现分别访问底层激活对象 词汇环境记录。从技术上讲,这个函数运行速度会慢一些,但我们甚至不讨论微优化,更像是 nano optimizations

某些浏览器可能确实将该代码优化为return的直接withVar语句。 Webkit 或至少 Chrome 及其 V8引擎是很好的选择。无论哪种方式,这都是微不足道的,你不应该关注这里的运行时性能。

JSPerf benchmark

我的机器(Chrome)差异约为0.32%,约为7.000.000次。


我会考虑购买这样的东西的唯一论据是,前一个函数适用于较少的字符。通过这种方式,您可以优化文件大小并减少线路上的流量(但即使这样,我们也必须在许多实例上优化这些语句才能真正发挥作用)