Javascript 谷歌闭包编译器:如何保存缓存的代码;这是什么;? 介绍
我经常使用谷歌闭包编译器来压缩我的JavaScript文件。现在,它似乎可以很好地压缩我的代码 现在,我试着养成将Javascript 谷歌闭包编译器:如何保存缓存的代码;这是什么;? 介绍,javascript,this,google-closure-compiler,Javascript,This,Google Closure Compiler,我经常使用谷歌闭包编译器来压缩我的JavaScript文件。现在,它似乎可以很好地压缩我的代码 现在,我试着养成将this对象存储在局部变量中的习惯,因为this不能混淆,但局部变量肯定可以混淆。但是,Google Closure Compiler无法识别这一点,而是删除了局部变量的所有实例,并将其替换为this 关于优化。。。 我很清楚,在编写代码时应该避免预优化。但是,我觉得缓存这个是可以接受的,因为这样做可以提供清晰性(因为这个可以有很多上下文,用另一个名称引用它可以减少歧义) 例子 下面
this
对象存储在局部变量中的习惯,因为this
不能混淆,但局部变量肯定可以混淆。但是,Google Closure Compiler无法识别这一点,而是删除了局部变量的所有实例,并将其替换为this
关于优化。。。
我很清楚,在编写代码时应该避免预优化。但是,我觉得缓存这个
是可以接受的,因为这样做可以提供清晰性(因为这个
可以有很多上下文,用另一个名称引用它可以减少歧义)
例子
下面的代码非常基本,我知道它可能写得不好。然而,代码将确切地说明我所面临的问题
以下是压缩前的原始源文件:
(function() {
var that = this;
that.a = 3;
that.b = 4;
this.c = 5;
return that;
}());
现在这里是压缩的源文件。请注意,this
到that
的赋值已被删除
(function(){this.a=3;this.b=4;this.c=5;return this})();
理想情况下,我希望的赋值保持某种形式,可能类似于:
(function(){var t=this;t.a=3;t.b=4;t.c=5;return t})();
现在,上面的代码几乎不保存任何字节,但是当使用一个更大的脚本时(就像我经常做的那样),节省的字节肯定会增加
问题:
简而言之,如何防止闭包编译器删除上述脚本中的变量?我想如果您确实需要,您可以这样做:
(function() {
var that = this || 1;
that.a = 3;
that.b = 4;
this.c = 5;
return that;
}());
您正试图超越编译器。这是一场失败的战斗。然而,以下是人们尝试做这类事情的两个主要原因
减少代码的大小。一个单字母变量小于关键字this
的理论。然而,这一理论在大多数情况下是有缺陷的。看
防止关键字此
的上下文更改。但是,在简单的_优化中,这是不必要的。如果创建引用变量的内部闭包,编译器将不会内联该值。在高级_优化中,在原型函数或构造函数之外使用关键字this
可能是危险的,应小心操作。看
如果确实要防止编译器内联您的值,则需要使用引号语法将其作为属性添加到对象上:
(function() {
var config = {};
config['that'] = this;
})()
你为什么在乎?它大约有5-10个字节,不会产生任何影响,继续走。问得好,但为什么在原始源代码中使用这个变量呢?是否仅用于混淆?我将此
分配给变量,因为它提供了清晰性。毕竟,这个
有很多上下文,所以用另一个名字来引用它可以减少歧义。如果你这样做是为了清晰,为什么你会在意它在优化后被删除?你说得很好;我想我只是想知道这些事情。那样的话,我就不需要任何帮助了。谢谢你的解释