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 last-child 列表最后一项的样式
Jan 22 Javascript
通过DOM脚本去设置样式信息
Sep 19 Javascript
window.open的页面如何刷新(父页面)上层页面
Dec 28 Javascript
jQuery制作仿腾讯web qq用户体验桌面
Aug 20 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
Jun 30 Javascript
AngularJS初始化过程分析(引导程序)
Dec 06 Javascript
基于jquery实现发送文章到手机的代码
Dec 26 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
May 26 Javascript
js for终止循环 跳出多层循环
Oct 04 Javascript
使用mixins实现elementUI表单全局验证的解决方法
Apr 02 Javascript
js实现随机div颜色位置 类似满天星效果
Oct 24 Javascript
vue-router 路由传参用法实例分析
Mar 06 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
php的4种常见运行方式
2015/03/20 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
PHP时间相关常用函数用法示例
2020/06/03 PHP
PHP实现递归的三种方法
2020/07/04 PHP
获取HTML DOM节点元素的方法的总结
2009/08/21 Javascript
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
JS小游戏之宇宙战机源码详解
2014/09/25 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
2017/11/23 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
JS中的两种数据类型及实现引用类型的深拷贝的方法
2018/08/12 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
python程序 创建多线程过程详解
2019/09/23 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
Kendra Scott官网:美国领先的时尚配饰品牌
2020/10/22 全球购物
外企C语言笔试题
2013/11/10 面试题
聘任书的写作格式及范文
2014/03/29 职场文书
标准的毕业生自荐信
2014/04/20 职场文书
小学班主任评语大全
2014/04/23 职场文书
教师评语大全
2014/04/28 职场文书
安全月宣传标语
2014/10/07 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
2014年财政所工作总结
2014/11/22 职场文书
优秀团员事迹材料
2014/12/25 职场文书
担保贷款承诺书
2015/04/30 职场文书
医院合作意向书范本
2015/05/08 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript
Vue如何实现组件间通信
2021/05/15 Vue.js