在以下代码中使用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
答案 0 :(得分:2)
正在审核的编译器正在尝试执行此操作的暂挂更改:http://code.google.com/p/closure-compiler/issues/detail?id=394