Javascript 为什么闭包编译器会将短变量引用重写为';这';关键字和还原';这个';?
我正在使用Google Closure编译器测试一些代码,并进行简单的优化,令我惊讶的是,我还测试了一个函数,例如:Javascript 为什么闭包编译器会将短变量引用重写为';这';关键字和还原';这个';?,javascript,compression,google-closure-compiler,Javascript,Compression,Google Closure Compiler,我正在使用Google Closure编译器测试一些代码,并进行简单的优化,令我惊讶的是,我还测试了一个函数,例如: window.navigator.detect = function() { var t = this, a = t.userAgent.toLowerCase(), match = /(chrome|webkit|firefox|msie)[ \/]([\w.]+)/.exec(a) || /(opera)(?:.*version|)[ \/]([\w.]+)/
window.navigator.detect = function() {
var t = this,
a = t.userAgent.toLowerCase(),
match = /(chrome|webkit|firefox|msie)[ \/]([\w.]+)/.exec(a) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a) ||
a.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a) || [];
t.ua = match[1] || false;
t.vers = match[2] || "0";
if (t.ua) t[match[1]] = true;
if (match = t.msie)
t.ie = parseInt(t.vers);//ie main version or false if not IE
else if (t.chrome)
t.webkit = true;
else if (t.webkit)
t.safari = true;
//css prefix
t.pre = t.webkit ? '-webkit-' : t.firefox ? '-moz-' : t.ie > 7 ? '-ms-' : t.opera ? '-o-' : '';
}
window.navigator.detect();
window.navigator.detect=function(){
var t=这个,
a=t.userAgent.toLowerCase(),
match=/(chrome | webkit | firefox | msie)[\/]([\w.]+)/.exec(a)||
/(opera)(?:.*版本|)[\/]([\w.]+)/.exec(a)||
a、 indexOf(“兼容”)<0&&/(mozilla)(?:.*rv:([\w.]+))/.exec(a)|[];
t、 ua=匹配[1]| |假;
t、 vers=匹配[2]| |“0”;
如果(t.ua)t[match[1]]=true;
如果(匹配=t.msie)
t、 ie=parseInt(t.vers);//ie主版本,如果不是ie,则为false
否则,如果(t.chrome)
t、 webkit=true;
else if(t.webkit)
t、 safari=true;
//css前缀
t、 pre=t.webkit?'-webkit-':t.firefox?'-moz-':t.ie>7?'-ms-':t.opera?'-o-':'';
}
window.navigator.detect();
变成:
window.navigator.detect = function() {
var a = this.userAgent.toLowerCase(), a = /(chrome|webkit|firefox|msie)[ \/]([\w.]+)/.exec(a) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a) || 0 > a.indexOf("compatible") && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a) || [];
this.ua = a[1] || !1;
this.vers = a[2] || "0";
this.ua && (this[a[1]] = !0);
this.msie ? this.ie = parseInt(this.vers) : this.chrome ? this.webkit = !0 : this.webkit && (this.safari = !0);
this.pre = this.webkit ? "-webkit-" : this.firefox ? "-moz-" : 7 < this.ie ? "-ms-" : this.opera ? "-o-" : ""
};
window.navigator.detect();
window.navigator.detect=function(){
var a=this.userAgent.toLowerCase(),a=/(chrome | webkit | firefox | msie)[\/]([\w.]+)/.exec(a)| |/(opera)(?:.*version |+][\/]([\w.]+)/.exec(a)| 0>a.indexOf(“兼容”)&/(mozilla)(?:*?:*rv:([\w.+)/.exec(a)];
this.ua=a[1]| |!1;
this.vers=a[2]| |“0”;
this.ua&(this[a[1]]=!0);
this.msie?this.ie=parseInt(this.vers):this.chrome?this.webkit=!0:this.webkit&(this.safari=!0);
this.pre=this.webkit?”-webkit-“:this.firefox?”-moz-“:7
我想使用一个较小的“t”变量作为“this”的引用,以节省一些字节,而不是使用17次的较长的“this”。在本例中,闭包编译器使我的代码变长,这有点讽刺。不确定这是否是有意的。我在谷歌的文档中没有看到任何相关内容
有什么办法可以防止这种警告吗?我自己发现的,通过更多的谷歌搜索。。。 答案与关于闭包编译器内联字符串的问题类似: 这是一个难题: “闭包编译器内联了我所有的字符串,这使我的代码变大了 更大。为什么这样做?大多数人通过查看来比较代码大小 在两个未压缩的JavaScript文件中。但这是一种误导性的方法 查看代码大小,因为不应该提供JavaScript文件 未压缩。它应该与gzip压缩一起提供。“…”gzip 该算法的工作原理是尝试以最佳方式对字节序列进行别名 手动为字符串添加别名几乎总是会生成压缩代码 更大,因为它破坏了gzip自己的别名算法。” 我尝试使用:
window.navigator.detect(window.navigator)将“t”var作为函数参数传递
然后window.navigator.detect=function(t){}
,它保留一个短的1字符变量。但是,虽然它在“编译大小”上节省了27个字节,“gzip大小”实际上要大1个字节
因此,虽然这里不完全是关于字符串的别名,但gzip的最终结果是类似的,并且应该是大小缩减方面的主要关注点。我自己发现的,通过更多的谷歌搜索。。。 答案与关于闭包编译器内联字符串的问题类似: 这是一个难题: “闭包编译器内联了我所有的字符串,这使我的代码变大了 更大。为什么这样做?大多数人通过查看来比较代码大小 在两个未压缩的JavaScript文件中。但这是一种误导性的方法 查看代码大小,因为不应该提供JavaScript文件 未压缩。它应该与gzip压缩一起提供。“…”gzip 该算法的工作原理是尝试以最佳方式对字节序列进行别名 手动为字符串添加别名几乎总是会生成压缩代码 更大,因为它破坏了gzip自己的别名算法。” 我尝试使用:
window.navigator.detect(window.navigator)将“t”var作为函数参数传递
然后window.navigator.detect=function(t){}
,它保留一个短的1字符变量。但是,虽然它在“编译大小”上节省了27个字节,“gzip大小”实际上要大1个字节
因此,虽然这里不完全是关于字符串的别名,但gzip的最终结果是类似的,并且应该是大小缩减方面的主要关注点