由於您創建了不可讀的變量名稱,因此無法讀取它,爲什麼不創建相關的變量名稱然後編譯它。
document.getElementById
不能被重命名,但你可以創建一個函數返回document.getElementById
可以重命名。
var getElementById = function(id){
return document.getElementById(id);
}
var getElementByIdClick = function(id, method_call){
return getElementById(id).onclick = method_call;
}
這可以被編譯爲
或者
function f(h){return document.getElementById(h)}function g(h,k){return f(h).onclick=k}
訣竅關閉編譯器使用盡可能多的變量可能的,不是一般的好主意,但關閉是這麼好,它會決定最好的。
因此,除了將重複出現的代碼移入函數之外,您還可以將每個「點符號」替換爲「方括號表示法」,併爲每個屬性和方法名稱使用變量。
這是一個極端的例子。
var _document=document,getElementById='getElementById', id='test',onclick='onclick',method_call=function(){};
_document[getElementById](id)[onclick] = method_call;
閉合編譯器將決定是否使用括號,如果是的話,它會重命名您的變量。
你可能以此結束;
var a=document,b='getElementById',c='test',d='onclick',e=function(){};
a[b](c)[d]=e;
或者它可能會用點符號代替它並刪除所有變量,但至少您已給它選項。
document.getElementById('test').onclick=function(){} //method_call
document.getElementById('test')
永遠不能被編譯成這個a[b](c)
的ADVANCED_OPTIMIZATIONS
選項closure compile將重命名功能,但它確實考慮到了多少次功能被使用。它可能完全刪除功能,只需使用document.getElementById
。
只是目測它,我可以減少我的.js大小5-20%做這個長函數名稱。 –
我不明白。您不能最小化文檔或getElementById並點擊 - 它們是標準的JavaScript名稱,不能重命名。似乎是微不足道的唯一的事情是「測試」。 –