JavaScript分析、压缩工具JavaScript Analyser


Posted in Javascript onDecember 31, 2014

JSA的压缩过程分两步

第一步是语法压缩,类似于Dojo ShrinkSafe,但比他安全,且更加有效。

第二步是文本压缩,目前采用的是
JavaScript Compressor的压缩算法。
(http://dean.edwards.name/packer/ )

这些都可以在设置窗口设置。
默认情况先用语法压缩,当文件大于1000byte且采用文本压缩仍然可以压缩到原来大小90%时才在原来基础上采用文本压缩。

下面来一段脚本压缩示例,展示一下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); 

} 

}

与其他压缩工具压缩率比较:

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 危险!!!!!

使用较短的名字替换掉长的局部变量名,这是一个极其不安全的压缩工具,举例说明:

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 不仅提供代码压缩功能,还可以做格式化,脚本分析。

脚本分析功能可以用于查看脚本信息,以及查找脚本中的潜在问题。
比如查看脚本中申明了那些函数,变量。
使用了那些外部变量。等等。。。

Javascript 相关文章推荐
jQuery与其它库冲突的解决方法
Jun 25 Javascript
在javascript将NodeList作为Array数组处理的方法
Jul 09 Javascript
javascript中数组的冒泡排序使用示例
Dec 18 Javascript
Jquery easyui开启行编辑模式增删改操作
Jan 14 Javascript
浅析script标签中的defer与async属性
Nov 30 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
Aug 25 Javascript
vue计算属性和监听器实例解析
May 10 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
Sep 17 Javascript
js前端面试之同步与异步问题详解
Apr 03 Javascript
JavaScript JSON数据处理全集(小结)
Aug 15 Javascript
Vue 中使用富文本编译器wangEditor3的方法
Sep 26 Javascript
JS实现多功能计算器
Oct 28 Javascript
jQuery中:last-child选择器用法实例
Dec 31 #Javascript
jQuery中:nth-child选择器用法实例
Dec 31 #Javascript
jQuery中:first-child选择器用法实例
Dec 31 #Javascript
jQuery中复合属性选择器用法实例
Dec 31 #Javascript
javascript实现左右控制无缝滚动
Dec 31 #Javascript
javascript比较两个日期的先后示例代码
Dec 31 #Javascript
jQuery中[attribute*=value]选择器用法实例
Dec 31 #Javascript
You might like
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
用PHP将数据导入到Foxmail
2006/10/09 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
php生成gif动画的方法
2015/11/05 PHP
Codeigniter中集成smarty和adodb的方法
2016/03/04 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
js常见表单应用技巧
2008/01/09 Javascript
js Function类型
2011/12/04 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
JS解决ie6下png透明的方法实例
2013/08/02 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
js 获取今天以及过去日期
2017/04/11 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
2017/06/04 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python实现从url中提取域名的几种方法
2014/09/26 Python
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
Python实现字符串逆序输出功能示例
2017/06/24 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
pymongo中group by的操作方法教程
2019/03/22 Python
解决python对齐错误的方法
2020/07/16 Python
Python 发送邮件方法总结
2020/08/10 Python
Python第三方库安装缓慢的解决方法
2021/02/06 Python
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
个人融资协议书范本两则
2014/10/15 职场文书
统计工作个人总结
2015/03/03 职场文书
中英文求职信范文
2015/03/19 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
高三语文教学反思
2016/02/16 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
Python 线程池模块之多线程操作代码
2021/05/20 Python