YUI Compressor は、以下を含む JavaScript コンテンツを圧縮します。
- コメントを削除する
- 余分なスペースを削除する
- マイナーな最適化
- 識別子の置換
YUI Compressor にはどのような微妙な最適化が含まれていますか?
- object["property"] 、プロパティ名が有効な JavaScript 識別子 (注: 有効な JavaScript 識別子は文字で始まり、オプションでその後に 1 つ以上の文字、数字、またはアンダースコアが続きます) であり、予約語ではない場合、最適化されます。 to: object.property
- {"property":123}、プロパティ名が有効な JavaScript 識別子であり、予約語ではない場合、{property:123} に最適化されます (注: オブジェクト リテラルでは、プロパティ名が有効な JavaScript 識別子である場合)これは予約語ではないため、プロパティ名を引用する必要はありません)。
- 'abcd'efgh' は、「abcd'efgh」に最適化されます。
- "abcd" + "efgh" は、文字列が接続されている場合、"abcdefgh" に最適化されます (注: すべて YUI Compressor を使用することを前提としています。スクリプト内の文字列接続の場合、コネクタ "+" を使用する効率と効率はメンテナンス性が最も高い)。
JavaScript の最も効果的な圧縮の最適化は、識別子の置換です。
例えば:
(関数(){
関数 add(num1, num2) {
num1 + num2 を返します。
}
})();
属識別子を置き換えた後:
(関数(){
関数 A(C, B) {
C+Bを返します。
}
})();
余分なスペースを削除すると、次のようになります。
(関数(){関数 A(C,B){リターン C+B;}})();
YUI Compressor の識別子の置換では、関数名と変数名のみが置換されますが、置換できないものは何ですか?
- プリミティブ値: 文字列、ブール値、数値、null、および未定義。一般に、文字列が最も多くのスペースを占め、次に非数値リテラル (true、false、null、underfind) が続きます。
- グローバル変数: ウィンドウ、ドキュメント、XMLHttpRequest など。最も一般的に使用されるのはドキュメントとウィンドウです。
- 属性名 (foo.bar など)。占有されるスペースは文字列に次いで多く、「.」演算子は置き換えることができず、abc はより多くのスペースを消費します。
- キーワード。頻繁に使用されすぎるキーワードは、var、return です。最良の最適化方法: var キーワードと return キーワードは関数内で 1 回だけ使用されます。
プリミティブ値、グローバル変数、および属性名の最適化処理はほぼ同じです。2回を超えて (2 回を含む) 使用されたリテラル値、グローバル変数、または属性名は、ローカル変数ストレージに置き換える必要があります。
ただし、状況によっては識別子の置換が禁止される場合があります。
- eval() 関数を使用します。解決策: eval() をカプセル化するグローバル関数を使用または作成しないでください。
- with ステートメントを使用します。解決策: 方法は上記と同じです。
- JScript の条件付きコメント。唯一の解決策は、使用しないことです。
YUI Compressor はrhino インタープリターに基づいて構築されているため、上記の最適化はすべて安全です。
さらに読む:
「YUI Compressor を使用した極端な JavaScript 圧縮」
オリジナル:
http://www.planabc.net/2009/08/02/javascript-compression_with_yui_compressor/