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 相关文章推荐
火狐浏览器(firefox)下获得Event对象以及keyCode
Nov 13 Javascript
jQuery超赞的评分插件(8款)
Aug 20 Javascript
分享Javascript实用方法二
Dec 13 Javascript
Vue.js 父子组件通讯开发实例
Sep 06 Javascript
Bootstrap学习笔记之环境配置(1)
Dec 07 Javascript
js中常用的Math方法总结
Jan 12 Javascript
JS中实现函数return多个返回值的实例
Feb 21 Javascript
详解如何在你的Vue项目配置vux
Jun 04 Javascript
layui下拉框获取下拉值(select)的例子
Sep 10 Javascript
vue 使用外部JS与调用原生API操作示例
Dec 02 Javascript
jQuery 选择方法及$(this)用法实例分析
May 19 jQuery
解决vue-router 切换tab标签关闭时缓存问题
Jul 22 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
新的一年,新的期待:DC在2020年的四部动画电影
2020/01/01 欧美动漫
德生PL330的评价与改造
2021/03/02 无线电
理解PHP中的stdClass类
2014/04/18 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
利用“多说”制作留言板、评论系统
2015/07/14 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
NodeJs生成sitemap站点地图的方法示例
2019/06/11 NodeJs
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
文明市民先进事迹
2014/05/15 职场文书
党员三严三实心得体会
2014/10/13 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
仓库管理制度范本
2015/08/04 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB
spring 项目实现限流方法示例
2022/07/15 Java/Android