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格式化金额可选是否带千分位以及保留精度
Jan 28 Javascript
get(0).tagName获得作用标签示例代码
Oct 08 Javascript
JS中捕获console.log()输出的方法
Apr 16 Javascript
JS动态创建DOM元素的方法
Jun 09 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
Aug 13 Javascript
Js制作点击输入框时默认文字消失的效果
Sep 05 Javascript
JavaScript实现的SHA-1加密算法完整实例
Feb 02 Javascript
JS实现页面跳转参数不丢失的方法
Nov 28 Javascript
js时间控件只显示年月
Jan 08 Javascript
基于JSONP原理解析(推荐)
Dec 04 Javascript
vue组件中使用iframe元素的示例代码
Dec 13 Javascript
Vue 实现双向绑定的四种方法
Mar 16 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使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
遍历jquery对象的代码分享
2011/11/02 Javascript
广泛收集的jQuery拖放插件集合
2012/04/09 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
Node.js 制作实时多人游戏框架
2015/01/08 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
vue二级路由设置方法
2018/02/09 Javascript
Python import用法以及与from...import的区别
2015/05/28 Python
python列表的常用操作方法小结
2016/05/21 Python
Python实现的随机森林算法与简单总结
2018/01/30 Python
python装饰器深入学习
2018/04/06 Python
Python给定一个句子倒序输出单词以及字母的方法
2018/12/20 Python
Python Flask上下文管理机制实例解析
2020/03/16 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
用60行代码实现Python自动抢微信红包
2021/02/04 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
HTML5 Canvas中绘制椭圆的4种方法
2015/04/24 HTML / CSS
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
索赔员岗位职责
2015/02/15 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
Java面试题冲刺第十八天--Spring框架3
2021/08/07 面试题
图文详解nginx日志切割的实现
2022/01/18 Servers
PyTorch中的torch.cat简单介绍
2022/03/17 Python