发布一个高效的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 实现父窗口引用弹出窗口的值的脚本
Aug 07 Javascript
JavaScript模板入门介绍
Sep 26 Javascript
javascript 使td内容不换行不撑开
Nov 29 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
Aug 15 Javascript
PHP+jQuery+Ajax实现多图片上传效果
Mar 14 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
Aug 26 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
Dec 19 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
Mar 01 Javascript
Vue.js弹出模态框组件开发的示例代码
Jul 26 Javascript
浅谈react+es6+webpack的基础配置
Aug 09 Javascript
vue-next/runtime-core 源码阅读指南详解
Oct 25 Javascript
vue实现商品列表的添加删除实例讲解
May 14 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 身份证号验证函数
2009/05/07 PHP
PHP学习 变量使用总结
2011/03/24 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
解析php session_set_save_handler 函数的用法(mysql)
2013/06/29 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
简单通用的JS滑动门代码
2008/12/19 Javascript
克隆javascript对象的三个方法小结
2011/01/12 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
兼容主流浏览器的JS复制内容到剪贴板
2014/12/12 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
jQuery自动或手动图片切换效果
2017/10/11 jQuery
基于Vue实现图书管理功能
2017/10/17 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
vue路由权限校验功能的实现代码
2020/06/07 Javascript
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
一文带你了解Python中的字符串是什么
2018/11/20 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
2015/11/18 面试题
群众路线教育实践活动思想汇报(2014特荐篇)
2014/09/16 职场文书
秋冬农业生产标语
2014/10/09 职场文书
早会开场白台词大全
2015/06/01 职场文书
初中物理教学反思
2016/02/19 职场文书
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers
SQLServer中exists和except用法介绍
2021/12/04 SQL Server
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL