【问题标题】:How can I get Google's Closure Compiler to eliminate attributes如何让 Google 的 Closure Compiler 消除属性
【发布时间】:2011-04-10 00:01:41
【问题描述】:

在以下代码上使用 Google Closure Compiler 高级优化时:

function add(v1, v2){
    return {x: v1.x + v2.x, y: v1.y + v2.y};
}

function lengthSq(vec){
    return vec.x*vec.x+vec.y*vec.y;
}

function test(v11, v12, v21, v22) {
    return lengthSq(add({x:v11, y:v12},{x:v21, y:v22}));
}
window['func']=test;

我得到了这个不满意的结果:

window.func = function(b, c, a, d) {
  b = {x:b, y:c};
  a = {x:a, y:d};
  a = {x:b.x + a.x, y:b.y + a.y};
  return a.x * a.x + a.y * a.y
};

我所希望的:

window.func = function(a, b, c, d) {
  return (a+c) * (a+c) + (b+d) * (b+d)
};

这里真正的问题是我需要将值存储在属性中,以便我可以从函数中获取多个返回值。据我所知,没有其他方法可以获得多个返回值。我最初希望 Closure Compiler 会为我消除这些,但似乎没有。

是否有可能有一个函数式或面向对象的 javascript 库可以输出与手动优化示例等效的代码?

我确信我的性能测试代码存在缺陷,因为没有属性的代码在 Chrome 和 Firefox 上大约快 100 倍,在 Opera 上快 12 倍,在 IE9 上快 4 倍。

此代码的性能测试:http://jsperf.com/closure-compiler-vs-hand-optimized-vectors

【问题讨论】:

    标签: javascript optimization google-closure-compiler


    【解决方案1】:

    正在审查的编译器有一个未决的更改尝试执行此操作:http://code.google.com/p/closure-compiler/issues/detail?id=394

    【讨论】:

      猜你喜欢
      • 2013-09-05
      • 2014-07-04
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 2011-05-12
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多