发布一个高效的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 操作单选框,复选框,下拉列表实现代码
Oct 27 Javascript
javascript 文本框水印/占位符(watermark/placeholder)实现方法
Jan 15 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
Dec 17 Javascript
FF IE浏览器修改标签透明度的方法
Jan 27 Javascript
node.js适合游戏后台开发吗?
Sep 03 Javascript
一个JavaScript用逗号分割字符串实例
Sep 22 Javascript
解析Node.js异常处理中domain模块的使用方法
Feb 16 Javascript
Node.js模块封装及使用方法
Mar 06 Javascript
Vue使用mixins实现压缩图片代码
Mar 14 Javascript
解决layer弹层遮罩挡住窗体的问题
Aug 17 Javascript
vue+element加入签名效果(移动端可用)
Jun 17 Javascript
Element Popover 弹出框的使用示例
Jul 26 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新手上路(五)
2006/10/09 PHP
FCKeditor的安装(PHP)
2007/01/13 PHP
逆序二维数组插入一元素的php代码
2012/06/08 PHP
PHP创建单例后台进程的方法示例
2017/05/23 PHP
JavaScript中的集合及效率
2010/01/08 Javascript
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
THREE.JS入门教程(5)你应当知道的十件事
2013/01/24 Javascript
用js调用迅雷下载代码的二种方法
2013/04/15 Javascript
移动端手指放大缩小插件与js源码
2017/05/22 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
Vue程序调试的方法
2019/06/17 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
python接口自动化之ConfigParser配置文件的使用详解
2020/08/03 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
欧洲品牌瓷器餐具网上商店:Porzellantreff.de
2018/04/04 全球购物
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
财务出纳员岗位职责
2013/11/26 职场文书
网络管理员岗位职责
2014/03/17 职场文书
关爱留守儿童标语
2014/06/18 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
MySQL 四种连接和多表查询详解
2021/07/16 MySQL
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers