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 相关文章推荐
来自qq的javascript面试题
Jul 24 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
Oct 31 Javascript
js实现带农历和八字等信息的日历特效
May 16 Javascript
Javascript如何判断数据类型和数组类型
Jun 22 Javascript
详解基于webpack和vue.js搭建开发环境
Apr 05 Javascript
浅谈JS中的反柯里化( uncurrying)
Aug 17 Javascript
vue cli webpack中使用sass的方法
Feb 24 Javascript
vue.js中created方法作用
Mar 30 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
May 17 jQuery
vue 实现Web端的定位功能 获取经纬度
Aug 08 Javascript
javascript解析json格式的数据方法详解
Aug 07 Javascript
vue+iview使用树形控件的具体使用
Nov 02 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 图片上传类代码
2009/07/17 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
js通过location.search来获取页面传来的参数
2014/09/11 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
js实现图片漂浮效果的方法
2015/03/02 Javascript
jquery原理以及学习技巧介绍
2015/11/11 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
2016/05/17 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
2020/09/08 Javascript
[01:53]2016完美“圣”典风云人物:Maybe专访
2016/12/05 DOTA
pyv8学习python和javascript变量进行交互
2013/12/04 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
python爬取抖音视频的实例分析
2021/01/19 Python
实例讲解CSS3中的box-flex弹性盒属性布局
2016/06/09 HTML / CSS
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
药剂专业自荐信范文
2014/04/16 职场文书
交通事故和解协议书
2014/09/25 职场文书
会议欢迎词
2015/01/23 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
python实现监听键盘
2021/04/26 Python
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS
Apache POI操作批量导入MySQL数据库
2022/06/21 Servers
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS