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 相关文章推荐
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
Nov 04 Javascript
jquery中获取select选中值的代码
Jun 27 Javascript
基于jquery tab切换(防止页面刷新)
May 23 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
May 08 Javascript
JS判断不能为空实例代码
Nov 26 Javascript
JS对img标签进行优化使用onerror显示默认图像
Apr 24 Javascript
使用jQuery jqPlot插件绘制柱状图
Dec 18 Javascript
JavaScript方法_动力节点Java学院整理
Jun 28 Javascript
vue-cli脚手架-bulid下的配置文件
Mar 27 Javascript
vue  directive定义全局和局部指令及指令简写
Nov 20 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
Apr 15 Javascript
JS将时间秒转换成天小时分钟秒的字符串
Jul 10 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
深入Nginx + PHP 缓存详解
2013/07/11 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
2016/03/17 PHP
Laravel中9个不经常用的小技巧汇总
2019/04/16 PHP
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
推荐10 款 SVG 动画的 JavaScript 库
2015/03/24 Javascript
javascript获取select值的方法分析
2015/07/02 Javascript
JS截取与分割字符串常用技巧总结
2015/11/10 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
探索webpack模块及webpack3新特性
2017/09/18 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
JavaScript面试中常考的字符串操作方法大全(包含ES6)
2020/05/10 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
Python找出最小的K个数实例代码
2018/01/04 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
python中partial()基础用法说明
2018/12/30 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
2019/02/20 Python
Django--权限Permissions的例子
2019/08/28 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
2020/04/22 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
美国网上订购鲜花:FTD
2016/09/23 全球购物
俄罗斯旅游网站:Tripadvisor俄罗斯
2017/03/21 全球购物
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
国际贸易专业求职信
2014/06/04 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
干部外出学习心得体会
2016/01/18 职场文书
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python