简体   繁体   中英

Why does Google Closure swap arguments?

I've seen the Google Closure compiler do a lot of rewriting in if-clauses. For example:

if (a === 3) {…}

turns to

if (3 === a) {…}

Are comparisons faster in JavaScript, if the primitive is the first argument, or what is the reason for this?

From 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.
 *
 */

As stated by a google closure compiler contributor , the compression the code comments are referring to means gzip compression, not the actual minification "compression". The reason it can improve gzip compression is that if you have 0 === x and x === 0 in your code, the closure compiler normalizes both of these to 0 === x , which is duplicated text and thus compresses better.

Then there is also:

typeof this.value == "object"

typeof this.key == "object"

The unique strings are: typeof this. , value , key and == "object"

But if you reorder:

"object" == typeof this.value

"object" == typeof this.key

The unique strings are: "object" == typeof this. , value and key . Less unique strings and quite a long duplicate one.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM