如何最小化嵌套属性

时间:2018-12-20 04:05:08

标签: javascript uglifyjs

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

输出:

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

我想要什么:

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

请注意,由于输入是从TypeScript生成的,因此我无法手工编写。

1 个答案:

答案 0 :(得分:18)

terser-js似乎没有这样的功能,但实际上没有。这两段代码实际上可以表现不同(minimax每次访问都可以返回不同的值),并且在大多数情况下,生成的代码实际上会更大。

我知道第一个示例看起来更大,并且未压缩,但是一旦用getter properties之类的文件进行压缩(如果您关心文件的大小,最好像大多数服务器一样使用gzip),重复数据可以轻松地压缩到压缩字典中,并且与对象被别名化之后相比,压缩后的数据实际上要

一些缩小器实际上曾经用来支持与您所描述的功能类似的各种功能(特别是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文件实际上是最小的文件。