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 相关文章推荐
北京奥运官方网站幻灯切换效果flash版打包下载
Jan 30 Javascript
jQuery数据显示插件整合实现代码
Oct 24 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
Jul 23 Javascript
js给onclick事件赋值,动态传参数实例解说
Mar 28 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
Nov 15 Javascript
JS随机漂浮广告代码具体实例
Nov 19 Javascript
javascript实现checkBox的全选,反选与赋值
Mar 12 Javascript
JS onkeypress兼容性写法详解
Apr 27 Javascript
vue.js绑定class和style样式(6)
Dec 09 Javascript
jQuery实现的上传图片本地预览效果简单示例
Mar 29 jQuery
解决vue中使用swiper插件问题及swiper在vue中的用法
Apr 04 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
Nov 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 作用域解析运算符(::)
2010/07/27 PHP
php中用foreach来操作数组的代码
2011/07/17 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
javascript实现上传图片并预览的效果实现代码
2011/04/11 Javascript
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
详谈Node.js之操作文件系统
2017/08/29 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
Vue 实现手动刷新组件的方法
2019/02/19 Javascript
python解析文件示例
2014/01/23 Python
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
室内设计专业个人的自我评价
2013/10/19 职场文书
大门门卫岗位职责
2013/11/30 职场文书
行政部岗位职责范本
2014/03/13 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
使用golang编写一个并发工作队列
2021/05/08 Golang
POST提交数据常见的四种方式
2022/01/18 HTML / CSS
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL