我已经看到Google Closure编译器在if子句中进行了大量的重写。例如:
if (a === 3) {…}
转向
if (3 === a) {…}
如果原语是第一个参数,那么JavaScript中的比较会更快吗?或者是什么原因?
答案 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 === 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
。不那么独特的字符串和相当长的重复字符串。