我查看了一些JavaScript压缩,注意到不是对象属性名的字符串都不会缩小到变量中。
例如,假设我的脚本中有这两段代码:
alert("Wrong answer");
alert("Wrong answer buddy");如果我没记错的话,我们从YUI和闭包中得到的缩减是:
alert("Wrong answer");alert("Wrong answer buddy");
我认为由此产生的缩减如下所示:
var a="Wrong answer";alert(a);alert(a+" buddy");有什么缩小工具可以做到这一点吗?是什么阻止了我们的工具做到这一点?
发布于 2010-07-21 11:44:59
gzip压缩会将相同的字符串压缩为一个或两个字节。使用它,它就不是问题了。:)
发布于 2010-07-21 11:36:24
如果我要大胆猜测,我会说这是因为编译器无法判断何时将字符串拆分成变量并将它们连接在一起会更好。(而且,就这样的事情而言,它首先属于微优化的标题。)
例如,以下代码:
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编译器首先会针对performance优化代码,其次才会针对字符数进行优化。由于这是一个优化,主要是为了改善字符计数,我认为可能根本没有足够的需求,以保证人们谁维护关闭和YUI压缩器的时间。
发布于 2010-07-21 11:25:11
压缩工具有其局限性,您可以找到一个。您应该为字符串创建自己的变量,然后工具将压缩变量名。
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 compressedhttps://stackoverflow.com/questions/3296054
复制相似问题