javascript - 如何缩小嵌套属性
问题描述
我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 属性可以在每次访问时返回不同的值),并且在大多数用例中生成的代码实际上会更大。
我知道第一个示例看起来更大,并且未压缩,但是一旦使用gzip之类的东西进行压缩(如果您关心文件大小,最好使用 gzip,就像大多数服务器一样),重复数据很容易压缩到压缩字典中,并且生成的压缩数据实际上比对象被别名时要小。
一些缩小器实际上用于支持类似于您所描述的各种功能(特别是闭包编译器),但开发人员后来意识到它实际上适得其反并删除了这些功能。
为了说明这种行为,我创建了这两个文件:
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
文件实际上是最小的文件。
推荐阅读
- c - 使用 write()、read() 和 fifo 在 C 中的进程之间共享数据
- haskell - 如何处理链式的除外?
- c# - 如何在 C# 中要求文件?
- python - 在 Windows 的 VS Code 中设置 Python 路径
- python - 如何在 Django 模板中添加社交分享按钮?
- asset-pipeline - 如何撤消 bundle exec rake assets:precompile 或使其更快?
- python - Graphql 突变以上传具有其他字段的文件
- salesforce - 如何使用 REST API 和 python 脚本在 Salesforce 帐户中创建案例
- html - 容器高度适应它的一个孩子,另一个孩子适应容器
- ruby - 当我调用另一个方法时,如何编写方法参数?