Googleの新しくリリースされた Closure コンパイラに対してjQueryをコンパイルした人はいますか?
コードサイズの大幅な節約が報告されています。 jQueryを使用してjQueryをコンパイルした場合の利点は何ですか。
John Resigは、jQuery 1.4を毎晩コンパイルしようとしたときに再帰関数に関するバグを報告したため、解決する必要があるいくつかのねじれがあります。 Closure CompilerでコンパイルされたjQueryは、jQueryテストベッドを通過することを確認せずに使用しません。
http://code.google.com/p/closure-compiler/issues/detail?id=1&can=1#c2
JQuery jQuery 1.3.2で試しました
jQuery-1.3.2.min.js 57254 Bytes
jQuery closure compiler 49730 Bytes
-----------------------------------
Reduced by 7524 Bytes
Saved 13.31% off the original size
Saved 10.87% off the gzipped size
〜7KBのゲイン
しかし、それはまた15の警告を報告し、それがまだ機能するかどうかはテストしませんでした
クロージャーコンパイラーは、実際には使用しないコードを排除します。典型的なWebページはjQuery関数のごく一部しか使用しないため、jQueryの完全版と一緒にコードをコンパイルすることで最大のメリットが得られます。
ADVANCED_OPTIMIZATIONSがオフの場合:
ADVANCED_OPTIMIZATIONSがオンになっている場合:変更しないと機能しません。 ADVANCED_OPTIMIZATIONSがオンになっていて、エクスポートで見つけることができるすべてのものはエクスポートされます...それでもまだ十分に機能せず、コードはすでに最大53466バイトです(そして18785 gzip圧縮されています--moreよりもADVANCED_OPTIMIZATIONSなしのgzipで圧縮されたクロージャコード)。
JQuery 1.4以降、GoogleのClosure CompilerがjQueryリリースのデフォルトの縮小手法として使用されます。ただし、jQueryはSIMPLE_OPTIMIZATIONS設定のみを使用します。 jQueryチームには ADVANCED_OPTIMIZATIONSをサポートする予定はありません があります。
好奇心から、私はYUIとClosureで縮小された最新のプロトタイプとjQueryライブラリのSlickSpeedテストをまとめました。 ここでテストを実行できます 。
他の人が指摘したように、ADVANCED_OPTを使用したコンパイルは機能しませんが、誰かがその機能を実行したい場合は、SlickSpeedテストに結果を追加できます。
オンラインコンパイラ で試してみましたが、うまく機能します。
Closureは単に変数を最小化して名前を変更しませんか? jQueryにはすでに.minバージョンがあります。再びクロージャで縮小することは、おそらく最小限の役に立ち、潜在的に危険でしょう。
編集:私はちょうどそれをやった。
Compilation was a success!
Original Size: 55.91KB (19.28KB gzipped)
Compiled Size: 54.05KB (18.28KB gzipped)
Saved 3.34% off the original size (5.18% off the gzipped size)
これはすでにマイニングされたバージョンの上にあります。ここにデモがあります: http://closure-compiler.appspot.com/home
私はClosure(ADVANCED_OPTIMIZATIONSを使用)を使用して、ホストしている単一ページのサイトのJavaScriptコードを圧縮し、YUI Compressorに比べてサイズを大幅に節約しました。そのため、私はそのサイトのjQueryも縮小することを検討し始めました。それは確かにentier jQueryライブラリを使用していないためです。
コンパイラを介してjQueryを実行するたびに警告が表示され、主に使用されていないコードの部分が指摘されます。それでも、コンパイルされたコードは機能しません。私が目にする主な問題は、コンパイラーによって物事が適切にエクスポートされないことです。私は自分のコードから関数をwindowオブジェクトにアタッチすることで簡単にエクスポートできましたが、jQueryではまだこれを行うことができませんでした。
良いニュースは、John ResigがすでにClosureを実験していることです。近い将来、互換性のある両方の新しいリリースが表示されると思います。