よくある質問


Closure Compiler とは特長
Closure Compiler は JavaScript のダウンロードと実行を高速化するためのツールです。Closure Compiler を使用すると、JavaScript ファイルのサイズを小さくして効率的にできます。
Closure Compiler と他の JavaScript コンポーザブルの違いは何ですか?

一般に、Closure Compiler は他のコード圧縮ツールの圧縮以上の容量を使用して、ウェブ アプリケーションのダウンロード時間を短縮する必要があります。また、Closure Compiler を使用すると、(テストではなく)開発中に構文エラーを見つけ、バグのある可能性のあるコードパターンを特定できます。

シンプル モードでは、コンパイラに似た分析を使用してコードサイズを最小限に抑える追加方法を見つけるため、Closure Compiler は他のツールより適切に動作します。たとえば、Closure Compiler は、出現回数が少なすぎる関数、変数名を再利用、定数式を事前に計算する関数をインライン化できます。

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

Closure Compiler は HTML に埋め込まれた JavaScript をコンパイルできますか?
いいえ。Closure Compiler は JavaScript のみを含むファイルでのみ動作します。
Closure Compiler と他の JavaScript 圧縮ツールは併用できますか?

はい。Closure Compiler は有効な JavaScript を読み取り、有効な JavaScript を生成します。そのため、別の圧縮ツールを介してファイルを実行する前か後に、Closure Compiler を JavaScript ファイルに適用できます。

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 ファイルを自動的に含めることができます。クロージャの確認では、クロージャの必要な部分を宣言する構文について説明しています。API で Closure Library を使用する方法については、API リファレンスをご覧ください。 Closure Compiler アプリケーションで Closure Library を使用するには、まず Closure Library をダウンロードする必要があります。Closure Library のサポートは、コンパイラ アプリでデフォルトで有効になっています。
ADVANCED_OPTIMIZATIONS でコンパイルすると、コードが動作しなくなるか、コンパイラでエラーが発生します。なぜですか?
通常、詳細モードを使用するには準備とコードの変更が必要です。高度なコンパイルとエクスターンでは、コードが ADVANCED_OPTIMIZATIONS で機能することを確認する方法について説明します。
コンパイルされたスクリプトにランダムな行フィードがあるのはなぜですか?
Closure Compiler では、約 500 文字ごとに改行が追加されます。ファイアウォールやプロキシでは、行が長い長い JavaScript ファイルは破損したり、無視されることがあります。500 文字ごとに改行を追加すると、この問題は回避されます。改行を削除しても、スクリプトのセマンティクスには影響しません。コードサイズへの影響は小さく、コンパイラは改行の位置を最適化します。これにより、ファイルの gzip 圧縮時にコードサイズのペナルティがさらに小さくなります。
著作権に関する通知またはオープンソース ライセンスのテキストをソースコードに表示する必要があります。Closure Compiler でこのテキストが削除されないようにするにはどうすればよいですか?
Closure Compiler は JSDoc @license タグをサポートしています。コンパイラ コメントにコメントを保持するには、任意の JSDoc コメントに @license タグを追加します。詳細については、Closure Compiler の JavaScript にアノテーションを追加するをご覧ください。