发布一个高效的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 相关文章推荐
javascript之大字符串的连接的StringBuffer 类
May 08 Javascript
JavaScript 存在陷阱 删除某一区域所有节点
May 10 Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
Aug 09 Javascript
Jquery刷新页面背景图片随机变换的实现方法
Mar 15 Javascript
几种延迟加载JS代码的方法加快网页的访问速度
Oct 12 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
May 12 Javascript
node.JS md5加密中文与php结果不一致的解决方法
May 05 Javascript
Angular2使用Angular CLI快速搭建工程(一)
May 21 Javascript
浅谈Node.js 沙箱环境
May 15 Javascript
element-ui 表格数据时间格式化的方法
Aug 24 Javascript
js根据json数据中的某一个属性来给数据分组的方法
Oct 08 Javascript
解决layUI的页面显示不全的问题
Sep 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
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
php使用递归函数实现数字累加的方法
2015/03/16 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
javascript Math.random()随机数函数
2009/11/04 Javascript
JS基础之undefined与null的区别分析
2011/08/08 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
jquery处理页面弹出层查询数据等待操作实例
2015/03/25 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
vue.js2.0 实现better-scroll的滚动效果实例详解
2018/08/13 Javascript
react 父子组件之间通讯props
2018/09/08 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
2019/07/09 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
详解详解Python中writelines()方法的使用
2015/05/25 Python
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
Python中内建模块collections如何使用
2020/05/27 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
中英文求职信范文
2014/01/27 职场文书
2014年国庆标语
2014/06/30 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
2015年复活节活动总结
2015/02/27 职场文书
关于开学的感想
2015/08/10 职场文书