Javascript 压缩和对象属性问题

Javascript compression and the object properties issue

主要的 JavaScript 压缩器和压缩器不处理对象属性名称。 (Google 关闭,YUI...)

我注意到结果大小(gzipped 和不 gzipped)有很大差异,具体取决于我们决定为脚本选择的方式或模式。

例如,为我们的项目选择原型模式很可能会生成更大的结果文件(未压缩、压缩和 gzip 压缩)。

下面是两个完全相同的代码的比较:

使用Google Closure compiler压缩。

只要看一下生成的压缩代码,结果就很明显了:


原型图案


var MyBluePrint=function(){this.name="demo";this.someFunction=function(){alert("some function")};this.someOtherFunction=function(){alert("some other function")};this.showMyName=function(){alert(this.name)};this.someFunction();this.someOtherFunction();this.showMyName()};new MyBluePrint;


无模式


var MyBluePrint=function(){alert("some function");alert("some other function");alert("demo")};new MyBluePrint;



任何使用对象属性的东西都不会被压缩。如:

//function declarations
this.someFunction = function(){ ... }

//objects
var demo = {
    isActive: 'aaaa'.
    name: 'aaaa'
}

我们在创建项目时真的应该考虑这个问题吗? 这不是我第一次决定使用普通变量而不是拥有一个充满属性的对象,只是为了压缩长 属性 名称被多次使用的事实。

属性 名称可由 Closure-Compiler 使用 ADVANCED_OPTIMIZATIONS 完全重命名。此外,要获得 Closure-compiler 的全部功能,您需要告诉编译器 MyBluePrint 是使用 @constructor 注释的构造函数。另外,你所说的 "prototype pattern" 实际上是使用实例方法 - 而不是原型。

这是更新的比较:

闭包编译器在许多情况下可以完全内联方法,使得输出大小差异几乎可以忽略不计。如果您可以将 Closure-compiler 与 ADVANCED_OPTIMIZATIONS 一起使用,您应该选择提供最佳可维护性的代码模式,并让编译器处理优化。

然而这些比较基本上都是没有意义的。要进行实际的 GZIP 压缩比较,您需要一个大型代码库。一小段代码无法提供准确的表示。