Closure Tools的用法

Closure Tools包含了三個部份
  1. A JavaScript optimizer
  2. A comprehensive JavaScript library
  3. An easy templating system for both Java & JavaScript
它的官方網站在: Closure Tools
Google I/O 2010的介紹影片:

Closure Library使用方法
  1. 在你的project目錄下, 打"svn checkout http://closure-library.googlecode.com/svn/trunk/ closure-library-read-only
    "
  2. 會透過svn到Google code的server上抓回它最新的source. 放在closure-library-read-only目錄下.
  3. 寫一個簡單的java script檔, 例如hello.js
  4. goog.require('goog.dom');
    
    function sayHi() {
    var newHeader = goog.dom.createDom('h1', {'style': 'background-color:#EEE'},
    'Hello world!');
    goog.dom.appendChild(document.body, newHeader);
    }
  5. 再寫一個簡單的HTML檔, 例如hello.html
  6. <html>
    <head>
    <script src="closure-library/closure/goog/base.js"></script>
    <script src="hello.js"></script>
    </head>
    <body onload="sayHi()">
    </body>
    </html>
  7. 結果再用browser去開hello.html就可以啦.
這是最簡單的方法, 但效率會比較差. 因為Browser在讀hello.html時, 會再另外建兩個connection去抓base.js跟hello.js回來. 而hello.js裡的"goog.require('goog.dom');", 會再多建幾個connection去把對應的檔案抓回來. 一來一往, 互相還有dependency, 無法平行同時開幾個connection去抓, 速度就慢了.
Closure Library為了解決這個問題, 它還提供了一個Dependency Calculation Script. 用法如下.
  1. 執行calcdeps.py
  2. closure-library-read-only/closure/bin/calcdeps.py -i hello.js -p closure-library/ -o script > hello-calc.js
  3. 這樣就會產生hello-calc.js這個檔, 看看內容, 它把前面說的base.js跟其它因為goog.require()會被包進來的java script檔, 全部都放到hello-calc.js檔裡. 所以在hello.html裡, 就不用分別include base.js跟hello.js, 只要include這個新的hello-calc.js就好了!
不過看看檔案大小, 這個新的hello-calc.js還是有256k這麼大. 看看內容, 裡面有一堆Apache license的條文, 而且出現了12次! 這些當然都是註解, 不過也會佔用傳輸的時間, 所以Closure Tools在這個script裡, 更進一步提供一個compiler的參數, 可以把hello-calc.js變得更小一點.
  1. 下載Closure compiler. 這是一個zip檔, 解壓縮後把compiler.jar放在project目錄下.
  2. 執行calcdeps.py
  3. closure-library-read-only/closure/bin/calcdeps.py -i hello.js -p closure-library/ -o compiled -c compiler.jar > hello-compiled.js
  4. 如果執行環境有支援Java 6的話, 應該可以順利跑完, 並且產生hello-compiled.js檔. 這個檔案只有56k, 而且功能跟hello-calc.js完全等價. 原本的hello.html只要include這個檔就可以, loading時間可以瞬間變成1/4.

留言

這個網誌中的熱門文章

Google Phone跟iPhone的比較!?

我第一個Android程式上架了...