发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser


Posted in Javascript onNovember 30, 2007

发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
先发一段脚本压缩示例,展示一下JSA语法压缩和优化功能。

try {     
    //xxxx();     
}     catch (e) {     
    yyyy();     
    function f1() {     
    }     
}     
finally {     
    zzzz();     
}     
function f2(var1) {     
    var var2 = 2;     
    var var3 = 3;     
    var withObject = {var2:-2}     
    with(withObject){     
        alert(var2);     
    }     
}   

压缩结果(经过格式化,便于查阅):  

zzzz();     
function f2(A) {     
    var var2 = 2;     
    var B = 3;     
    var C = {var2:-2};     
    with (C) {     
        alert(var2);     
    }     
}    
  

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 代码
function(){   
  var withObject = {variable1:1}   
  var variable1 = 2;   
  with(withObject){   
    alert(variable1);   
  }   
}  

将压缩成 :
function(){   
var _1={variable1:1};   
var _2=2;   
with(_1){   
alert(_2);   
}   
}  

这明显是错误的,这个垃圾没有注意javascript某些特殊语法,和动态性。 
对eval函数,catch操作,with语句,都未作任何处理。 

相比之下JSA的是当前我知道的最安全最有效的压缩工具。 
JSA 不仅提供代码压缩功能,还可以做格式化,脚本分析。 

脚本分析功能可以用于查看脚本信息,以及查找脚本中的潜在问题。 
比如查看脚本中申明了那些函数,变量。 
使用了那些外部变量。等等。。。 

 
下载地址:
http://sourceforge.net/project/showfiles.php?group_id=175776
或者
http://forum.xidea.org  文件列表

Javascript 相关文章推荐
jquery中实现简单的tabs插件功能的代码
Mar 02 Javascript
jquery二级导航内容均分的原理及实现
Aug 13 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
Jan 02 Javascript
让table变成exls的示例代码
Mar 24 Javascript
关于jQuery判断元素是否存在的问题示例探讨
Jul 21 Javascript
JS实现图片产生波纹一样flash效果的方法
Feb 27 Javascript
浅谈JavaScript中的对象及Promise对象的实现
Nov 15 Javascript
详解开源的JavaScript插件化框架MinimaJS
Oct 26 Javascript
使用vue for时为什么要key【推荐】
Jul 11 Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
Dec 18 Javascript
基于js实现数组相邻元素上移下移
May 19 Javascript
在Vue 中实现循环渲染多个相同echarts图表
Jul 20 Javascript
jquery 指南/入门基础
Nov 30 #Javascript
Prototype1.6 JS 官方下载地址
Nov 30 #Javascript
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
Nov 30 #Javascript
jQuery 研究心得 取得属性的值
Nov 30 #Javascript
XRegExp 0.2: Now With Named Capture
Nov 30 #Javascript
javascript数组组合成字符串的脚本
Jan 06 #Javascript
比较简单的一个符合web标准的JS调用flash方法
Nov 29 #Javascript
You might like
我的群发邮件程序
2006/10/09 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
详解PHP PDO简单教程
2019/05/28 PHP
thinkphp整合系列之极验滑动验证码geetest功能
2019/06/18 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
2017/06/06 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
uni-app 支持多端第三方地图定位的方法
2020/01/03 Javascript
nodejs各种姿势断点调试的方法
2020/06/18 NodeJs
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
[06:43]DAC2018 4.5 SOLO赛 Maybe vs Paparazi
2018/04/06 DOTA
详解Python中contextlib上下文管理模块的用法
2016/06/28 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
快速了解Python开发中的cookie及简单代码示例
2018/01/17 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
wxPython实现整点报时
2019/11/18 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
pyspark 随机森林的实现
2020/04/24 Python
英国最大的美妆产品在线零售商之一:Beauty Bay
2017/09/29 全球购物
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
乡镇信息公开实施方案
2014/03/23 职场文书
给老婆的检讨书(搞笑版)
2015/05/06 职场文书
2016大学生社会实践心得体会范文
2016/01/14 职场文书
Windows环境下实现批量执行Sql文件
2021/10/05 SQL Server