为什么Google Closure交换参数?

时间:2012-12-04 10:49:49

标签: javascript google-closure

我已经看到Google Closure编译器在if子句中进行了大量的重写。例如:

if (a === 3) {…}

转向

if (3 === a) {…}

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

1 个答案:

答案 0 :(得分: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 closure compiler contributor所述,代码注释所指的压缩意味着gzip压缩,而不是实际的缩小“压缩”。它可以改进gzip压缩的原因是,如果你的代码中有0 === xx === 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。不那么独特的字符串和相当长的重复字符串。