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 相关文章推荐
js 深拷贝函数
Dec 04 Javascript
仅img元素创建后不添加到文档中会执行onload事件的解决方法
Jul 31 Javascript
原生javascript实现图片弹窗交互效果
Jan 12 Javascript
javascript实现设置、获取和删除Cookie的方法
Jun 01 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
Sep 20 Javascript
最实用的jQuery分页插件
Oct 09 Javascript
angular实现图片懒加载实例代码
Jun 08 Javascript
Node.Js中实现端口重用原理详解
May 03 Javascript
微信小程序中使用wxss加载图片并实现动画效果
Aug 13 Javascript
小程序新版订阅消息模板消息
Dec 31 Javascript
原生js实现日历效果
Mar 02 Javascript
Element InfiniteScroll无限滚动的具体使用方法
Jul 27 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数组函数序列之array_combine() - 数组合并函数使用说明
2011/10/29 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
js 日期转换成中文格式的函数
2009/07/07 Javascript
js event事件的传递与冒泡处理
2009/12/06 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
七夕情人节丘比特射箭小游戏
2015/08/20 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
读Javascript高性能编程重点笔记
2016/12/21 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
浅谈python标准库--functools.partial
2019/03/13 Python
Python中栈、队列与优先级队列的实现方法
2019/06/30 Python
解决Atom安装Hydrogen无法运行python3的问题
2019/08/28 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
python实现批量修改文件名
2020/03/23 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
单位实习证明怎么写
2014/01/17 职场文书
高中家长意见怎么写
2015/06/03 职场文书
python实现简单反弹球游戏
2021/04/12 Python
PHP设计模式(观察者模式)
2021/07/07 PHP
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android
详解Go语言中Get/Post请求测试
2022/06/01 Golang