发布一个高效的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 相关文章推荐
JS执行删除前的判断代码
Feb 18 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
Jun 19 Javascript
js模拟淘宝网的多级选择菜单实现方法
Aug 18 Javascript
基于Jquery easyui 选中特定的tab
Nov 17 Javascript
Angularjs material 实现搜索框功能
Mar 08 Javascript
AngularJS中一般函数参数传递用法分析
Nov 22 Javascript
JS去除重复并统计数量的实现方法
Dec 15 Javascript
如何正确理解javascript的模块化
Mar 02 Javascript
js微信应用场景之微信音乐相册案例分享
Aug 11 Javascript
Element 默认勾选表格 toggleRowSelection的实现
Sep 04 Javascript
d3.js 地铁轨道交通项目实战
Nov 27 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
Oct 30 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里得到前天和昨天的日期的代码
2007/08/16 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
php 判断页面或图片是否经过gzip压缩的方法
2017/04/05 PHP
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
javascript获得服务器端控件的ID的实现代码
2011/12/28 Javascript
jQuery.holdReady()方法用法实例
2014/12/27 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
详解Angular的8个主要构造块
2017/06/20 Javascript
微信小程序 开发MAP(地图)实例详解
2017/06/27 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python多线程编程方式分析示例详解
2013/12/06 Python
python去除字符串中的换行符
2017/10/11 Python
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
Python如何读取文件中图片格式
2020/01/13 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
Python调用C/C++的方法解析
2020/08/05 Python
我们是伦敦女孩:WalG
2018/01/08 全球购物
重新定义牛仔布,100美元以下:Warp + Weft
2018/07/25 全球购物
公司总经理任命书
2014/06/05 职场文书
优秀应届生求职信
2014/06/16 职场文书
计算机相关专业自荐信
2014/07/02 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
博物馆观后感
2015/06/05 职场文书
如何在Python中创建二叉树
2021/03/30 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
MySQL提取JSON字段数据实现查询
2022/04/22 MySQL