繁体   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