发布一个高效的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 innerHTML 的一些问题的解决方法
Jun 22 Javascript
Jquery+JSon 无刷新分页实现代码
Apr 01 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
Jun 16 Javascript
JavaScript DOM 对象深入了解
Jul 20 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
Sep 05 Javascript
Bootstrap框架安装使用详解
Jan 21 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
Feb 03 Javascript
Web纯前端“旭日图”实现元素周期表
Mar 10 Javascript
bootstrap日期插件daterangepicker使用详解
Oct 19 Javascript
vue微信分享 vue实现当前页面分享其他页面
Dec 02 Javascript
原生JS实现九宫格抽奖
Sep 13 Javascript
create-react-app开发常用配置教程
Jun 25 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
ftp类(myftp.php)
2006/10/09 PHP
MYSQL环境变量设置方法
2007/01/15 PHP
php缓冲 output_buffering和ob_start使用介绍
2014/01/30 PHP
php防止伪造数据从地址栏URL提交的方法
2014/08/24 PHP
在网页里看flash的trace数据的js类
2009/01/10 Javascript
SWFObject 2.1以上版本语法介绍
2010/07/10 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
2015/12/17 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
protractor的安装与基本使用教程
2017/07/07 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
python中实现将多个print输出合成一个数组
2018/04/19 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
python银行系统实现源码
2019/10/25 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
2019/11/15 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
2020/06/29 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
小车司机岗位职责
2013/11/25 职场文书
物流创业计划书
2014/02/01 职场文书
森林防火工作方案
2014/02/14 职场文书
公司委托书怎么写
2014/08/02 职场文书
中学生运动会广播稿
2015/08/19 职场文书
如何把新闻人物写得立体、鲜活?
2019/08/14 职场文书
导游词之青城山景区
2019/09/27 职场文书
Python使用pyecharts控件绘制图表
2022/06/05 Python
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript