如何缩小嵌套属性

How to minify nested properties

我正在使用 terser-js 来缩小我的代码。

输出:

a.prototype.a = ...
a.prototype.b = ...
a.prototype.c = ...

我想要的:

var h = a.prototype
h.a = ...
h.b = ...
h.c = ...

请注意,我无法手写,因为输入是从 TypeScript 生成的。

terser-js 似乎没有这样的功能,实际上它没有。这两段代码实际上可以有不同的行为(getter properties 每次访问时可以 return 不同的值)并且在大多数用例中生成的代码实际上会更大。

我知道第一个例子看起来更大,而且是未压缩的,但是一旦用 gzip 之类的东西压缩(如果你关心文件大小,你最好使用 gzip,就像大多数服务器一样)重复的数据很容易压缩到压缩字典中,与对象别名相比,压缩后的数据实际上 更小

一些 minifiers 实际上用于支持类似于您所描述的各种功能(特别是 Closure Compiler),但开发人员后来意识到它实际上适得其反并删除了这些功能。

为了说明这种行为,我创建了这两个文件:

a.js :

a.prototype.a = 'testing 1';
a.prototype.b = 'testing 2';
a.prototype.c = 'testing 3';

b.js :

var h = a.prototype;
h.a = 'testing 1';
h.b = 'testing 2';
h.c = 'testing 3';

看看我用gzip压缩后的结果:

$ gzip -k -9 *.js
$ ls -l
total 32
-rw-r--r--  1 user  group  87 Dec 22 15:50 a.js
-rw-r--r--  1 user  group  69 Dec 22 15:50 a.js.gz
-rw-r--r--  1 user  group  78 Dec 22 15:50 b.js
-rw-r--r--  1 user  group  75 Dec 22 15:50 b.js.gz

a.js.gz文件实际上是最小的文件。