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 相关文章推荐
extjs form textfield的隐藏方法
Dec 29 Javascript
JavaScript中for..in循环陷阱介绍
Nov 12 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
Apr 06 Javascript
JS获取当前网页大小以及屏幕分辨率等
Sep 05 Javascript
jQuery中:checkbox选择器用法实例
Jan 03 Javascript
javascript中caller和callee详解
Aug 10 Javascript
JS实现的竖向折叠菜单代码
Oct 21 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
Jan 04 Javascript
AngularJS控制器之间的通信方式详解
Nov 03 Javascript
javascript 跨域问题以及解决办法
Jul 17 Javascript
浅谈layui分页控件field参数接收对象的问题
Sep 20 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
Nov 04 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
BBS(php & mysql)完整版(六)
2006/10/09 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
php微信开发之关注事件
2018/06/14 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
google地图的路线实现代码
2009/08/20 Javascript
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
详解Javascript继承的实现
2016/03/25 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
ztree加载完成后显示勾选节点的实现代码
2018/10/22 Javascript
JavaScript变速动画函数封装添加任意多个属性
2019/04/03 Javascript
node读写Excel操作实例分析
2019/11/06 Javascript
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
Python中用Spark模块的使用教程
2015/04/13 Python
python简单文本处理的方法
2015/07/10 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
python实现简易通讯录修改版
2018/03/13 Python
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
django框架cookie和session用法实例详解
2019/12/10 Python
python实现查找所有程序的安装信息
2020/02/18 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
Ajax的优点和缺点
2014/11/21 面试题
Python实现视频中添加音频工具详解
2021/12/06 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python