2011-04-10 52 views
2

當使用谷歌關閉編譯器先進的優化上下面的代碼:我怎樣才能獲得谷歌的關閉編譯器,以消除屬性

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編譯器能爲我消除這些,但似乎沒有。

是否有可能有一個功能或面向對象的JavaScript庫,可以輸出相當於手優化示例的代碼?

我相信我的性能測試代碼有缺陷,因爲沒有屬性的代碼在Chrome和Firefox上的速度大約快100倍,在Opera上速度快大約12倍,在IE9上速度快4倍。這段代碼的

性能測試:http://jsperf.com/closure-compiler-vs-hand-optimized-vectors

回答

相關問題