8

我已经看到 Google Closure 编译器在 if 子句中做了很多重写。例如:

if (a === 3) {…}

转向

if (3 === a) {…}

如果原语是第一个参数,那么 JavaScript 中的比较是否更快,或者这是什么原因?

4

1 回答 1

16

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.、、valuekey== "object"

但是,如果您重新排序:

"object" == typeof this.value

"object" == typeof this.key

唯一的字符串是"object" == typeof this.valuekey。较少唯一的字符串和相当长的重复字符串。

于 2012-12-04T11:39:13.913 回答