Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么闭包编译器会将短变量引用重写为';这';关键字和还原';这个';?_Javascript_Compression_Google Closure Compiler - Fatal编程技术网

Javascript 为什么闭包编译器会将短变量引用重写为';这';关键字和还原';这个';?

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.]+)/

我正在使用Google Closure编译器测试一些代码,并进行简单的优化,令我惊讶的是,我还测试了一个函数,例如:

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的最终结果是类似的,并且应该是大小缩减方面的主要关注点