2012-01-15 7 views
5

私はいつもjs圧縮器がこれをしない理由を疑問に思っていました。なぜそれがこのような何かにコンパイルされませんなぜjs compressorsはこれをしないのですか?

(function($){var a=$("a");1<a.length&&10>a.length?alert(a.length):alert($("p").length)})(jQuery); 

::のは、私はこのような縮小さスクリプトがあるとしましょう[minified key].propertyのすべての発生を変更する意味

(function($,L){var a=$("a");1<a[L]&&10>a[L]?alert(a[L]):alert($("p")[L])})(jQuery,'length'); 

と文字列を渡すと、これは、159 .lengthでのjQueryを縮小化する方法をはるかに想像

(私は.lengthと上記ました基本的にはどのような)iifeへのarg受信機62 .each,15 .appendChildなど.lengthだけで600バイト以上を節約できます。

また、あなたがそのスペースを確保することができるとき、それはvarキーワードにスペースを無駄にしない理由上記の例を使用すると、他のパラメータを宣言することで範囲を機能:また

(function($,L,a){a=$("a");1<a[L]&&10>a[L]?alert(a[L]):alert($("p")[L])})(jQuery,'length'); 

私はここであなたを持っていながら、なぜ入れませんjQuery全体を評価して別の572 functionキーワード(4.5k)に保存しますか?

+0

私はそのようなJSを書いていましたが、まだ時々です。また、String.prototype.IO = String.prototype.indexOfまたはUs = 'undefined'; Ss = 'string'; Ow =ウィンドウ;とString.prototype.has –

答えて

6

私は、プロパティルックアップに加えて変数ルックアップの費用を必要としたくないと思います。

クロージャコンパイラを使用すると、手動で行うと、実際に参照の種類が取り消されます。

最終的に、gzipすれば、私はそれらの難読化があまりにも多くなるとは思わない。場合によってはgzippedバージョンを実際に大きくしても驚くことはありません。

5

コードの構造が変更されるためです。オブジェクトのlengthプロパティで動作するメソッドを持つ代わりに、プロポーザルは、渡されたプロパティ名にアクセスできるようにする関数を提供します。これは元のコードの意図とは異なる可能性があります。

これにはパフォーマンス上の影響があります。少なくとも、JavaScriptランタイムでの特定の最適化が使用できなくなる可能性があります。

ほとんどのJavaScriptソースファイルは、GZip圧縮(ネゴシエートされ、HTTPレベルでほとんどのWebサーバー/ブラウザで透過的に行われる)を通過する必要があります。これは、 "var再利用されたプロパティ名。

+0

私は関数の誤用が本当に理由であるとは思わない。これはIIFEだから、何らかの引数が与えられて初めて呼び出される。それは、分断なしで最後にパラメータと引数を追加できるはずです。それぞれの数が等しいことに注意する必要があります。 –

+1

...おそらく 'arguments'オブジェクトが参照されない限り。 –

+4

また、クロージャのために余分な変数が残っています – jermel

3

minifierはコード機能を変更しないでください。不要な文字のみを削除してください。

関連する問題