8

GoogleClosureコンパイラが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.、 、valueおよびkeyです。一意の文字列が少なく、重複する文字列がかなり長くなります。

于 2012-12-04T11:39:13.913 に答える