10

クロージャ コンパイラを使用して jQuery の未使用部分を削除することは可能ですか?

jQuery のネットワーク (json) 関数のみを使用するスクリプトがあり、他のすべてを削除する縮小されたスクリプトが必要です。

私はそれを呼び出すことを試みました:

    java -jar compiler.jar --compilation_level=ADVANCED_OPTIMIZATIONS --js=jquery-latest.js --js=my_script.js  --js_output_file=out.js

しかし、最終的には、通常の縮小された jQuery ソースよりも小さくないファイルになります。

編集:この背後にある理由について言及する必要があります。このスクリプトは、サード パーティの Web サイトに含まれる予定であり、jQuery の新しいバージョン (1.5 または 1.6) が必要です。これを処理する最も簡単な方法は、スクリプト内に最新バージョンをバンドルし (window.jQuery には触れず、私のスクリプトでのみ使用可能)、未使用の部分を削除してサイズを縮小することだと思いました。そうすれば、古いバージョンの jQuery が既にある場合でも、干渉することはありません。

4

4 に答える 4

6

次のような非常識な方法でメソッドを呼び出すことができるため、jQuery で「未使用」のメソッドを削除することはできません。

<input id="test" value="hello!"/>

alert($('#test')[prompt('Method?')]()); // input "val" in the prompt box

クロージャ コンパイラは、どのメソッドが使用されるかどうかを知ることができない可能性があります。

フィドル: http://jsfiddle.net/garreh/xDDXt/


いくつかの補足事項として:

  • jQuery の最新製品バージョン (1.6) はわずか 31kb です。適切なキャッシュ制御により、これは一度ダウンロードされ、ブラウザーによってローカルにキャッシュされます。
  • おそらく、一般的にサイズがはるかに大きいもの、つまり画像を最適化するために、自分自身に有利になるでしょう。
  • ... または、CSS スプライト技術を使用して Web サイトをより適切に最適化するなど、ブラウザーの要求を減らします。
  • jQuery コード<script>タグをページの下部に配置して、ダウンロードの並列化を向上させます。http://developer.yahoo.com/blogs/ydn/posts/2007/07/high_performanc_5/
于 2011-05-13T14:11:12.837 に答える
5

まず、デッド コードを削除するには、Advanced Mode が必要です。すでにご利用いただいているようです。

次に、拡張モードの使用に関する厳しい制限に準拠するようにコードを作成する必要があります。あなたはそれを行い、コードを徹底的にチェックしたと思います-そうでなければ、コンパイルされたコードは機能しません。

次に、jQuery の「externs」ファイルを参照する必要があります。このファイルは、Closure Compiler の Web サイトから入手できます。この externs ファイルがないと、Closure は jQuery のプロパティと関数の名前を変更してはなりません。

最後に、jQuery は Closure Compiler の Advanced Mode で動作するように作成されていません。最適化して取り除くことができない「エイリアス」を作成する場所がたくさんあります。コード ベース内の任意の場所にエイリアスが 1 つでもあれば、jQuery オブジェクト全体とその下のすべてが取り込まれます。

簡単な回答: デッド コードを削除するために jQuery で Closure Compiler の Advanced Mode を使用するには、多くの作業が必要です。

トピック外: Dojo Toolkit は、これまでのところ、Closure Compiler の Advanced Mode で使用できる唯一の一般的な JavaScript ライブラリ (Closure Library を除く) です。Closure Compiler の高度な機能 (デッド コードの削除、メソッドの仮想化、名前空間のフラット化など) はすべてサポートされています。

TODO ドキュメントについては、このリンクを確認してください: http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t

于 2011-05-14T09:15:13.823 に答える
1

jQueryの「エクスポート」自体から始めて、コンパイラがjQueryライブラリで何もしない理由はたくさんあります。

window.jQuery = jQuery

高度なモードでは、このイディオムは、値がスクリプトの外部で使用されることをコンパイラに伝えるために使用されるため、オブジェクト自体は決して削除されず、名前の階層は折りたたまれずに残ります。

これを削除すると、jQuery 自体が無名関数関数ラッパーに埋め込まれ、ADVANCED モードのグローバル スコープの最適化 (名前階層、型分析のためのクラス検出など) の多くが妨げられます。

ただし、これを削除してもあまり変化はありませんが、次の問題は探しませんでした。

于 2011-05-13T16:28:36.763 に答える
-1

ender代わりに試してください。

その哲学は、一連のマイクロ フレームワークを組み合わせたものです。機能が必要ない場合は、ender に組み込まないでください。

ajax だけが必要な場合は、ajax モジュールを ender ビルドに追加します。

于 2011-05-13T14:42:20.587 に答える