最高の JavaScript コンプレッサー [終了]
-
09-06-2019 - |
質問
利用可能な最高の JavaScript コンプレッサーは何ですか?次のようなツールを探しています。
- 使いやすいです
- 圧縮率が高い
- 信頼性の高い最終結果を生成します (コードを混乱させません)
解決
最近リリースした UglifyJS, 、JavaScript で書かれた JavaScript コンプレッサー (NodeJS 上で実行されます) Node.js プラットフォームに依存しますが、何も必要としないため、任意の JavaScript エンジンで実行するように簡単に変更できます。 Node.js
内部)。両方よりもはるかに速いです YUI コンプレッサー そして Googleの閉鎖, よりも圧縮率が高くなります。 ゆい 私がテストしたすべてのスクリプトで、Closure よりも安全です (「eval」または「with」の処理を知っています)。
UglifyJS は空白の削除以外に次のことも行います。
- ローカル変数名を変更します (通常は単一文字に)
- 連続する var 宣言を結合します
- 不要な括弧、括弧、セミコロンの挿入を回避します。
- IF を最適化します (不要であることが検出された場合は「else」を削除し、IF を &&、||、または ?/ に変換します)。可能な場合は演算子など)。
- 変換する
foo["bar"]
の中へfoo.bar
可能であれば - 可能な場合は、オブジェクト リテラルのキーから引用符を削除します
- コードが小さくなる場合 (1+3*4 ==> 13)、単純な式を解決します。
追伸:ああ、「美しくする」こともできます。;-)
他のヒント
数年後にこの質問を再検討してみると、 UglifyJS, 、現時点では最良の選択肢のようです。
以下で説明するように、これは NodeJS プラットフォームで実行されますが、任意の JavaScript エンジンで実行するように簡単に変更できます。
---以下の古い回答---
Googleがリリース クロージャコンパイラ これは、これまでに確認した限り最小のファイルを生成しているようです ここ そして ここ
その前に、さまざまなオプション 次のとおりでした
基本的に パッカー 初期圧縮ではより良い仕事をしますが、ネットワーク上に送信する前にファイルを gzip する場合は (そうする必要があります) YUI コンプレッサー 最小の最終サイズを取得します。
ちなみにテストはjQueryコードで行われました。
- オリジナルの jQuery ライブラリ 62,885 バイト、gzip 後 19,758 バイト
- JSM で縮小された jQuery 最小 36,391 バイト、gzip 後 11,541 バイト
- Packer で縮小された jQuery 21,557 バイト、gzip 後 11,119 バイト
- YUI Compressor で縮小された jQuery 31,822 バイト、gzip 後は 10,818 バイト
@ダニエル・ジェームス コメントでの言及 コンプレッサー評価者 これは Packer が最高の圧縮率でチャートをリードしていることを示しているので、おそらく ymmv だと思います
YUI コンプレッサー が進むべき道です。圧縮率が高く、十分にテストされており、多くのトップサイトで使用されており、個人的にもお勧めします。
私はこれをプロジェクトに使用しましたが、JavaScript エラーや問題は 1 つも発生しませんでした。そして、素晴らしいドキュメントが付いています。
CSS 圧縮機能を使用したことはありませんが、同様に存在します。 CSS 圧縮も同様に機能します。
注記:ディーン・エドワーズの /パッカー/ は YUI Compressor よりも優れた圧縮率を実現しますが、使用中にいくつかの JavaScript エラーが発生しました。
私が使う シュリンクセーフ Dojoプロジェクトから - 実際に JavaScript インタープリターを使用するので例外的です (サイ) コード内のシンボルの検索やその範囲の理解などに対処します。これは、正規表現を使用して同じことを行う (信頼性が低い) 多くの圧縮ツールとは対照的に、コードが相手側から送信されたときに確実に動作するようにするのに役立ちます。
実際には MSBuild タスクがあります Web展開プロジェクト 私の現在の Visual Studio ソリューションでは、スクリプトを実行し、展開する前にソリューションのすべての JS ファイルを ShrinkSafe 経由で実行しますが、非常にうまく機能します。
編集: ちなみに、「最良」の基準はプロジェクトのニーズによって異なるため、「最良」については議論の余地があります。個人的には、ShrinkSafe はバランスが取れていると思います。最小のサイズ == 最高だと考える人にとっては、それだけでは不十分です。
編集: YUI コンプレッサーも Rhino を使用していることは注目に値します。
試す JSmin, 、C#、Java、C、その他のポートも入手でき、すぐに利用できます。
Packer を使用する場合は、「変数を圧縮」オプションを選択して、結果のコードを gzip するだけです。Base62 オプションは、サーバーが gzip 形式のファイルを送信できない場合にのみ使用できます。「shrink vars」を使用したパッカーは YUI の圧縮率を向上させますが、どこかでセミコロンをスキップした場合にバグが発生する可能性があります。
Base62 は基本的に貧乏人の gzip です。そのため、base62 で圧縮されたコードを gzip 圧縮すると、shrink-var-ed コードを gzip 圧縮するよりも大きなファイルが得られます。
JSmin もう一つです。
銀の弾丸を検索する際に、この質問を見つけました。Ruby on Railsの場合 http://github.com/sstephenson/sprockets
ソースコードは次のとおりです それを行う HttpHandler について、おそらく役立つでしょう
バナナスクリプト.com 以前は最高の結果をもたらしてくれました。
KJS圧縮
http://opensource.seznam.cz/KJScompress/index.html
KJSCompress/CSSKOMPRESSは、JavaScriptとCSSを含むファイルから有意でないホワイトスペースとコメントを削除するために、2つのアプリケーション(kjsCompress a cssCompress)のセットです。どちらもGNU/Linuxオペレーティングシステムのコマンドラインアプリケーションです。
Jsクラッシュ は、縮小後に使用するのに適したコンプレッサーです。
私が使う jscompressor.com クロムアプリとして。