javascript - 为什么谷歌闭包编译不将重用索引保留在变量中?
问题描述
这个 MWE展示了 google 闭包编译器如何将 short 换成obj[keyA]
long obj["some-very-long-key"]
:
输入javascript:
var foo = new function() {
var keyA = 'some-very-long-key';
var keyB = 'another-key';
this.bar = function() {
obj[keyA] = {};
}
this.baz = function(data) {
obj[keyA][keyB] = data;
}
}();
谷歌闭包编译器输出:
var foo = new function() {
this.bar = function() {
obj["some-very-long-key"] = {};
};
this.baz = function(a) {
obj["some-very-long-key"]["another-key"] = a;
};
};
如果我删除包装功能,它会按我的预期工作:
输入javascript:
var keyA = 'some-very-long-key';
var keyB = 'another-key';
function bar() {
obj[keyA] = {};
}
function baz(data) {
obj[keyA][keyB] = data;
}
谷歌闭包编译器输出:
var keyA = "some-very-long-key", keyB = "another-key";
function bar() {
obj[keyA] = {};
}
function baz(a) {
obj[keyA][keyB] = a;
}
;
因为我在我的项目中经常使用长键,所以如果 google 闭包编译器将字符串文字保留在变量中,代码会变得比它可能的大。
- 是什么导致了这种行为?
- 如何让它将字符串文字存储在变量中并使用该变量(名称较短)作为索引,同时将整个内容保留在构造函数中?
更新 1:我知道我想要的结果可能会稍微差一点,但我宁愿采用更短的代码。
解决方案
由于 gzip - 它通常使压缩后的大小更小。它甚至在常见问题解答中
推荐阅读
- laravel - Laravel与关系分页
- python - 在 PyCharm 中使用 Heroku 配置变量
- python - python中循环的并行化
- ruby-on-rails - 如何仅显示与模型数据库中的记录匹配的 API json 响应中的属性?
- javascript - 如何在 JavaScript 中动态创建二维 (2D) 字符串数组
- angular - 是否可以将返回可观察对象的函数绑定到@Input?
- git - Git,如何提取新代码并保留本地更改?诸如数据库连接字符串、图形、图标之类的东西。我不想放在源代码主机上
- android - Android:RecyclerView addOnItemTouchListener 中的 setTitle 不起作用
- apache-spark - 在配置单元中更改表(插入新数据)时此记录插入新数据的时间
- asp.net-mvc - Typescript equivalent of inline JavaScript