posts - 495,comments - 227,trackbacks - 0
           

          發布一個高效的JavaScript分析、壓縮工具 JavaScript Analyser

          先發一段腳本壓縮示例,展示一下JSA語法壓縮和優化功能。

          1. try {  
          2.     //xxxx();  
          3. }  
          4.   
          5. catch (e) {  
          6.     yyyy();  
          7.     function f1() {  
          8.     }  
          9. }  
          10.   
          11. finally {  
          12.     zzzz();  
          13. }  
          14.   
          15. function f2(var1) {  
          16.     var var2 = 2;  
          17.     var var3 = 3;  
          18.     var withObject = {var2:-2}  
          19.     with(withObject){  
          20.         alert(var2);  
          21.     }  
          22. }  

           

          壓縮結果(經過格式化,便于查閱):

          1. zzzz();  
          2. function f2(A) {  
          3.     var var2 = 2;  
          4.     var B = 3;  
          5.     var C = {var2:-2};  
          6.     with (C) {  
          7.         alert(var2);  
          8.     }  
          9. }   

           

          JSA的壓縮過程分兩步

          第一步是語法壓縮,類似于Dojo ShrinkSafe,但比他安全,且更加有效。

          第二步是文本壓縮,目前采用的是
          JavaScript Compressor的壓縮算法。
          (http://dean.edwards.name/packer/ )

          這些都可以在設置窗口設置。
          默認情況先用語法壓縮,當文件大于1000byte且采用文本壓縮仍然可以壓縮到原來大小90%時才在原來基礎上采用文本壓縮。

          與其他壓縮工具壓縮率比較:

          1. JavaScript Compressor(http:// dean.edwards.name/packer/) 
              與他自己的壓縮工具代碼為例(v2.02) packer壓縮后大小為 7,428 字節(去除注釋)。
              而我們的壓縮工具可以壓縮至7,256  字節
              7256 / 7428 = 0.9768443726440496
          2.Dojo ShrinkSafe (粗糙的東西,既低效又危險,建議原有用戶趕緊換掉)
              與他自己的框架源代碼為例(v0.4.1):
              他自己壓縮大小為149,518 字節,而我們壓縮后可以縮小至81,261 字節
              81261 / 149518 = 0.5434864029748927

          安全性說明:

          1.JavaScript Compressor
                基于文本的壓縮,我沒有細看其中邏輯,但是這種壓縮出問題的可能性很低,我們的壓縮工具也使用到他的壓縮算法,在JSI 1.1 a8 及
          其集成的第三方類庫的測試中,未見異常。而且還有知名框架JQuery使用,相信不會有問題。

          補充(2007-03-12):今天發現,這個東西在分析JavaScript多行字符串語法時,有bug。不過這個問題在經過JSA語法壓縮之后,將不復存在。


          2.Dojo ShrinkSafe 危險!?。。。?
             使用較短的名字替換掉長的局部變量名,這是一個極其不安全的壓縮工具,舉例說明:

          javascript 代碼
          1. function(){  
          2.   var withObject = {variable1:1}  
          3.   var variable1 = 2;  
          4.   with(withObject){  
          5.     alert(variable1);  
          6.   }  
          7. }  

          將壓縮成 :
          1. function(){  
          2. var _1={variable1:1};  
          3. var _2=2;  
          4. with(_1){  
          5. alert(_2);  
          6. }  
          7. }  


          這明顯是錯誤的,這個垃圾沒有注意javascript某些特殊語法,和動態性。
          對eval函數,catch操作,with語句,都未作任何處理。

          相比之下JSA的是當前我知道的最安全最有效的壓縮工具。
          JSA 不僅提供代碼壓縮功能,還可以做格式化,腳本分析。

          腳本分析功能可以用于查看腳本信息,以及查找腳本中的潛在問題。
          比如查看腳本中申明了那些函數,變量。
          使用了那些外部變量。等等。。。
           
           
          posted on 2008-02-15 17:36 SIMONE 閱讀(743) 評論(0)  編輯  收藏 所屬分類: JavaScript
          主站蜘蛛池模板: 华宁县| 紫金县| 唐河县| 锦州市| 大宁县| 米林县| 潜山县| 綦江县| 灌阳县| 兴仁县| 天全县| 山阳县| 广宗县| 务川| 浪卡子县| 兴和县| 湘西| 温宿县| 澄城县| 威信县| 平凉市| 乌鲁木齐市| 沂水县| 宣化县| 雷山县| 凤冈县| 乐安县| 阿拉善盟| 香港| 北流市| 永清县| 湘潭市| 和硕县| 商水县| 玛多县| 克什克腾旗| 三门峡市| 澄城县| 呼图壁县| 来安县| 扬中市|