簡體   English   中英

JavaScript縮小字符串文字?

[英]JavaScript minification of string literals?

我正在查看一些JavaScript壓縮,並注意到沒有對象屬性名稱的字符串被縮小為變量。

例如,假設我的腳本中有這兩段代碼:

alert("Wrong answer");
alert("Wrong answer buddy");

如果我沒弄錯的話,我們從YUI和Closure得到的縮小是:

alert("Wrong answer");alert("Wrong answer buddy") ;

我認為最終的縮小將如下所示:

var a="Wrong answer";alert(a);alert(a+" buddy");

有沒有縮小工具呢? 什么阻止我們的工具這樣做?

gzip壓縮會將相同的字符串減少到一個或兩個字節。 使用它,這是一個非問題。 :)

如果我冒險猜測,我會說這是因為編譯器無法判斷何時將字符串分解為變量並將它們連接起來更為理想。 (而且,就這些事情而言,它首先屬於微優化的標題。)

例如,以下代碼:

if (test_case==="He fell down a well") {
    var i=my_object_array.length-1;
    while(i>=0) {
        my_object_array[i].say("He fell down a well did he Lassie?");
        i--;
    }
}

可能會被理論編譯器重新渲染為:

var x="He fell down a well";
if (a===x) {
    var i=b.length-1;
    while(i>=0) {
        b[i].say(x+" did he Lassie?");
        i--;
    }
}

...當然會增加 while循環完成其工作所需的時間。

當然,稍微更智能的編譯器可能會識別陷阱並進一步優化:

var x="He fell down a well";
var x1=x+" did he Lassie?";
if (a===x) {
    var i=b.length-1;
    while(i>=0) {
        b[i].say(x1);
        i--;
    }
}

無論哪種方式,一個好的javascript編譯器,在我看來,首先優化代碼的性能 ,其次只是字符數。 由於這是一個主要用於字符數改進的優化,我認為可能根本沒有足夠的需求來保證維護Closure和YUI Compressor的人的時間。

壓縮工具有其局限性,您找到了一個。 您應該為字符串創建自己的變量,然后工具將壓縮變量名稱。

Eg
var msg_wrong = "Wrong answer",
    msg_very_wrong = msg_wrong + "!!!";
alert (msg_wrong);
alert (msg_very_wrong);


// "msg_wrong" and "msg_very_wrong" variable names will be compressed

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM