我已经看到 Google Closure 编译器在 if 子句中做了很多重写。例如:
if (a === 3) {…}
转向
if (3 === a) {…}
如果原语是第一个参数,那么 JavaScript 中的比较是否更快,或者这是什么原因?
我已经看到 Google Closure 编译器在 if 子句中做了很多重写。例如:
if (a === 3) {…}
转向
if (3 === a) {…}
如果原语是第一个参数,那么 JavaScript 中的比较是否更快,或者这是什么原因?
从ReorderConstantExpression.java:
/**
* Reorder constant expression hoping for a better compression.
* ex. x === 0 -> 0 === x
* After reordering, expressions like 0 === x and 0 === y may have higher
* compression together than their original counterparts.
*
*/
正如google 闭包编译器贡献者所说,代码注释所指的压缩是指 gzip 压缩,而不是实际的缩小“压缩”。它可以改进 gzip 压缩的原因是,如果你的代码中有0 === x
并且x === 0
,闭包编译器会将这两个规范化为0 === x
,这是重复的文本,因此可以更好地压缩。
然后还有:
typeof this.value == "object"
typeof this.key == "object"
唯一的字符串是:typeof this.
、、value
和key
== "object"
但是,如果您重新排序:
"object" == typeof this.value
"object" == typeof this.key
唯一的字符串是"object" == typeof this.
:value
和key
。较少唯一的字符串和相当长的重复字符串。