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}};
嗯,當然,這是有道理的,我想。也許一些縮小器會這樣做(它們並不完全相同)。這裏有個問題嗎? – sgroves
@sgroves簡單模式下的YUI/GCC/JSMin/UglifyJS - 其中一個似乎沒有。高級模式下的GCC對代碼的要求非常高,因此要實現它是一項非常大的挑戰。所以,我還不是很確定。 – v2b
這是一個問題嗎?在我縮小了一些東西之後,我再也沒有看過它。誰在乎。如果你想把'com.example.dummy.type'賦給函數外部的變量,那麼你應該這樣做(或者,上帝保佑,你可以使用'with')。或者找到一個將會或者自己寫的縮小器。 – sgroves