发布一个高效的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代码
Oct 09 Javascript
小型js框架veryide.librar源代码
Mar 05 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
Feb 16 Javascript
jquery索引在使用中的一些困惑
Oct 24 Javascript
JQuery中DOM事件合成用法实例分析
Jun 13 Javascript
JavaScript中利用Array和Object实现Map的方法
Jul 27 Javascript
AngularJS基础 ng-list 指令详解及示例代码
Aug 02 Javascript
详解angularjs获取元素以及angular.element()用法
Jul 25 Javascript
Vue组件之Tooltip的示例代码
Oct 18 Javascript
Vue+element-ui 实现表格的分页功能示例
Aug 18 Javascript
jquery+ajax实现异步上传文件显示进度条
Aug 17 jQuery
小程序自定义弹框效果
Nov 16 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
探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
2013/06/24 PHP
PHP函数eval()介绍和使用示例
2014/08/20 PHP
自定义session存储机制避免会话保持问题
2014/10/08 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
2016/03/02 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
2016/05/17 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
JS中offset和匀速动画详解
2018/02/06 Javascript
jQuery获取随机颜色的实例代码
2018/05/21 jQuery
element表格翻页第2页从1开始编号(后端从0开始分页)
2019/12/10 Javascript
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
纯CSS3大转盘抽奖示例代码(响应式、可配置)
2017/01/13 HTML / CSS
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
解决html5中video标签无法播放mp4问题的办法
2017/05/07 HTML / CSS
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
统计系教授推荐信
2014/02/28 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
2016春节放假通知范文
2015/08/18 职场文书
大学生各类奖学金申请书
2019/06/24 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
python四种出行路线规划的实现
2021/06/23 Python
使用Springboot实现健身房管理系统
2021/07/01 Java/Android
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL