よくある質問


Closure Compiler とは使用するメリット
Closure Compiler は、JavaScript のダウンロードと実行を高速化するためのツールです。Closure Compiler を使用すると、JavaScript ファイルのサイズを縮小し、効率を高めることができます。
Closure Compiler は、他の JavaScript コンプレッサとどう違うのですか?

一般的に、Closure Compiler は他のコードの最小化ツールよりも圧縮率が高く、ウェブ アプリケーションのダウンロード時間を短縮します。また、Closure Compiler は、開発中に(テスト中ではなく)構文エラーを見つけ、バグの可能性があるコードパターンを特定するのに役立ちます。

Simple モードでは、Closure Compiler はコンパイラのような分析を使用してコードサイズを最小限に抑える方法を見つけるため、他のツールよりも優れた結果が得られるはずです。たとえば、Closure Compiler は、数回しか使用されない関数をインライン化したり、変数名を再利用したり、定数式を事前計算したりできます。

詳細モードでは、Closure Compiler は追加された型アノテーションを使用して、見つけにくいバグを検出することもできます。

Closure Compiler は HTML に埋め込まれた JavaScript をコンパイルできますか?
いいえ。Closure Compiler は、JavaScript のみを含むファイルでのみ動作します。
Closure Compiler を他の JavaScript ミニファイアと組み合わせて使用できますか?

はい。Closure Compiler は有効な JavaScript を読み取り、有効な JavaScript を生成します。そのため、別のミニファイアでファイルを実行する前または後に、JavaScript ファイルに Closure Compiler を適用できます。

Closure Compiler などのミニファイアは、入力コードについて想定していることがあることに注意してください。コメントを削除するミニファイアは、別のツールで必要なライセンスやアノテーション情報を削除する可能性があります。

Closure Compiler が生成する JavaScript をデバッグするにはどうすればよいですか?
コンパイルされたコードがエラーをスローしたり、予期しない動作をしたりする場合は、ソースマップを使用して問題をデバッグできます。ソースマップは、コンパイルされたコードと元のソースコード間のマッピングを提供します。これにより、ブラウザのデベロッパー ツールで、コンパイルされたコードではなく元のソースコードを表示できます。Closure Compiler でソースマップを生成するには、コマンドラインで --create_source_map フラグを渡します。次に例を示します。
$ java -jar compiler.jar --js example.js --create_source_map ./example-map --js_output_file example-compiled.js
次に、ソースマップをサポートするブラウザ(Chrome や Firefox など)を使用している場合は、コンパイルされていないコードの場合と同様にブレークポイントを設定できます。ブラウザのデベロッパー ツールには、元のソースの対応するコード行が表示されます。ソースマップに関する情報など、Chrome のデベロッパー ツールについて詳しくは、JavaScript のデバッグをご覧ください。
コンパイラは、アプリケーションの実行速度とダウンロード コードサイズの間でトレードオフを行いますか?
はい。最適化コンパイラは、常にトレードオフを行います。サイズを最適化すると、わずかな速度のオーバーヘッドが発生することがあります。ただし、Closure Compiler のデベロッパーは、実行時のオーバーヘッドが大幅に増えないように注意しています。コンパイラの最適化の中には、実行時間を短縮するものもあります(次の質問を参照)。
コンパイラは速度を最適化しますか?
ほとんどの場合、コードが小さいほど高速になります。ウェブ アプリケーションでは、通常、ダウンロード時間が最も重要な速度要因であるためです。冗長性を減らす最適化により、コードの実行時間も短縮されます。
コンパイルできるファイルのサイズに制限はありますか?
コンパイル ウェブサービスには最大ファイル サイズがありますが、スタンドアロン コンパイラ アプリケーションにはありません。
Closure Compiler はすべてのプラットフォームで利用できますか?
コンパイラは Java で記述されているため、Java が実行される場所であればどこでも実行できます。
コンパイラは、有効な JavaScript を処理できますか?
ほとんどの場合。eval()with() などの JavaScript 構造の一部は、コンパイラの変換の基盤となる前提を無効にする可能性があります。
Closure Compiler を使用するには、ウェブ開発についてどの程度の知識が必要ですか?
Closure Compiler は JavaScript 開発用のツールであるため、コンパイラを使用するには JavaScript でのプログラミング方法を知っておく必要があります。ただし、JavaScript を使用するユーザーであれば、Closure Compiler を使用するメリットがあります。
Closure Compiler は Closure Library とどのように連携しますか?
Closure Compiler は、Closure Library を使用するコードに対して特別なチェックと最適化を行います。また、Closure Compiler サービスは Closure Library ファイルを自動的に含めることができます。Closure の使い方では、必要な Closure の部分を宣言するための構文について説明しています。API で Closure ライブラリを使用する方法については、API リファレンスをご覧ください。Closure Compiler アプリケーションで Closure Library を使用するには、まず Closure Library をダウンロードする必要があります。Closure ライブラリのサポートは、コンパイラ アプリケーションでデフォルトで有効になっています。
ADVANCED_OPTIMIZATIONS でコンパイルすると、コードが動作しなくなるか、コンパイラがエラーを生成します。理由
通常、高度なモードを使用するには、準備とコードの変更が必要です。高度なコンパイルと外部ファイルでは、コードが ADVANCED_OPTIMIZATIONS で動作することを確認する方法について説明しています。
コンパイルされたスクリプトにランダムな改行があるのはなぜですか?
Closure Compiler は、意図的に 500 文字ごとに改行を追加します。ファイアウォールやプロキシは、非常に長い行を含む大きな JavaScript ファイルを破損させたり、無視したりすることがあります。500 文字ごとに改行を追加すると、この問題を回避できます。改行を削除しても、スクリプトのセマンティクスには影響しません。コードサイズへの影響は小さく、Compiler は改行の配置を最適化するため、ファイルを gzip 圧縮した場合のコードサイズ ペナルティはさらに小さくなります。
ソースコードに表示する必要がある著作権表示またはオープンソース ライセンス テキストがあります。Closure Compiler がこのテキストを削除しないようにするにはどうすればよいですか?
Closure Compiler は JSDoc の @license タグをサポートしています。@license タグを JSDoc コメントに追加すると、コンパイラの出力でコメントが保持されます。詳しくは、Closure Compiler 用の JavaScript のアノテーションをご覧ください。