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的变量作用域和this指针的讨论
Dec 16 Javascript
js 优化次数过多的循环 考虑到性能问题
Mar 05 Javascript
jQuery 对Select的操作备忘记录
Jul 04 Javascript
JS、CSS加载中的小问题探讨
Nov 26 Javascript
深入理解javascript中return的作用
Dec 30 Javascript
JavaScript实现级联菜单的方法
Jun 29 Javascript
使用jQuery制作基础的Web图片轮播效果
Apr 22 Javascript
红黑树的插入详解及Javascript实现方法示例
Mar 26 Javascript
详解在React项目中安装并使用Less(用法总结)
Mar 18 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
May 20 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
Aug 06 Javascript
封装 axios+promise通用请求函数操作
Aug 11 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解析html类库simple_html_dom(详细介绍)
2013/07/05 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
javascript的对话框详解与参数
2007/03/08 Javascript
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
2019/10/11 Javascript
简化Python的Django框架代码的一些示例
2015/04/20 Python
利用python生成一个导出数据库的bat脚本文件的方法
2016/12/30 Python
Python和C/C++交互的几种方法总结
2017/05/11 Python
详解python实现线程安全的单例模式
2018/03/05 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
PyQt弹出式对话框的常用方法及标准按钮类型
2019/02/27 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
pytorch多GPU并行运算的实现
2019/09/27 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
python list的index()和find()的实现
2020/11/16 Python
Html5导航栏吸顶方案原理与对比实现
2020/06/10 HTML / CSS
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
车间统计员岗位职责
2014/01/05 职场文书
竞选宣传委员演讲稿
2014/05/24 职场文书
团队口号大全
2014/06/06 职场文书
平安建设汇报材料
2014/12/29 职场文书
2015年维修工作总结
2015/04/25 职场文书
总结Python常用的魔法方法
2021/05/25 Python
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis