2013-08-06 18 views
1

關於縮小邏輯的問題。涉及不可變屬性的Javascript縮小邏輯

// Assumptions: 
//com.example.dummy ns is available 
//com.example.dummy.type is defined immutable -> Object.defineProperty 

var test, test1, test2; 
function execute_case(id) { 
    switch(id) { 
    case 0: 
     test = com.example.dummy.type; 
     break; 
    case 1: 
     test1 = com.example.dummy.type; 
     break; 
    case 2: 
     test2 = com.example.dummy.type; 
     break; 
    default: 
     console.log("default"); 
     break; 
    } 
} 

的YUI壓縮機將其壓縮成,

var test,test1,test2;function execute_case(a){switch(a){case 0: 
test=com.example.dummy.type;break;case 1:test1=com.example.dummy.type;break; 
case 2:test2=com.example.dummy.type;break;default:console.log("default");break}}; 

豈不是合乎邏輯的壓縮機做以下作爲優化?

var test, test1, test2; 
var st = com.example.dummy.type; 
function execute_case(id) { 
    switch(id) { 
    case 0: 
     test = st; 
    case 1: 
     test1 = st; 
     break; 
    case 2: 
     test2 = st; 
     break; 
    default: 
     console.log("default"); 
     break; 
    } 
} 

可以看出,這裏的壓縮效果更好。

var test,test1,test2;var st=com.example.dummy.type;function execute_case(a){ 
switch(a){case 0:test=st;case 1:test1=st;break;case 2:test2=st;break; 
default:console.log("default");break}}; 
+1

嗯,當然,這是有道理的,我想。也許一些縮小器會這樣做(它們並不完全相同)。這裏有個問題嗎? – sgroves

+0

@sgroves簡單模式下的YUI/GCC/JSMin/UglifyJS - 其中一個似乎沒有。高級模式下的GCC對代碼的要求非常高,因此要實現它是一項非常大的挑戰。所以,我還不是很確定。 – v2b

+0

這是一個問題嗎?在我縮小了一些東西之後,我再也沒有看過它。誰在乎。如果你想把'com.example.dummy.type'賦給函數外部的變量,那麼你應該這樣做(或者,上帝保佑,你可以使用'with')。或者找到一個將會或者自己寫的縮小器。 – sgroves

回答

1

這優化使非壓縮源代碼的感覺,但如果該文件是用gzip壓縮的交付(這是強烈推薦)。

字符串別名往往會使壓縮的源代碼變大。

查看Closure-compiler FAQ