发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser

发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser

先发一段脚本压缩示例,展示一下JSA语法压缩和优化功能。

  1. try {
  2. //xxxx();
  3. }
  4. catch (e) {
  5. yyyy();
  6. function f1() {
  7. }
  8. }
  9. finally {
  10. zzzz();
  11. }
  12. function f2(var1) {
  13. var var2 = 2;
  14. var var3 = 3;
  15. var withObject = {var2:-2}
  16. with(withObject){
  17. alert(var2);
  18. }
  19. }

压缩结果(经过格式化,便于查阅):

  1. zzzz();
  2. function f2(A) {
  3. var var2 = 2;
  4. var B = 3;
  5. var C = {var2:-2};
  6. with (C) {
  7. alert(var2);
  8. }
  9. }

JSA的压缩过程分两步

第一步是语法压缩,类似于Dojo ShrinkSafe,但比他安全,且更加有效。

第二步是文本压缩,目前采用的是
JavaScript Compressor的压缩算法。
(http://dean.edwards.name/packer/ )

这些都可以在设置窗口设置。
默认情况先用语法压缩,当文件大于1000byte且采用文本压缩仍然可以压缩到原来大小90%时才在原来基础上采用文本压缩。

与其他压缩工具压缩率比较:

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 危险!!!!! 
   使用较短的名字替换掉长的局部变量名,这是一个极其不安全的压缩工具,举例说明:

javascript 代码

  1. function(){
  2. var withObject = {variable1:1}
  3. var variable1 = 2;
  4. with(withObject){
  5. alert(variable1);
  6. }
  7. }

将压缩成 :

  1. function(){
  2. var _1={variable1:1};
  3. var _2=2;
  4. with(_1){
  5. alert(_2);
  6. }
  7. }

这明显是错误的,这个垃圾没有注意javascript某些特殊语法,和动态性。 
对eval函数,catch操作,with语句,都未作任何处理。

相比之下JSA的是当前我知道的最安全最有效的压缩工具。 
JSA 不仅提供代码压缩功能,还可以做格式化,脚本分析。

脚本分析功能可以用于查看脚本信息,以及查找脚本中的潜在问题。 
比如查看脚本中申明了那些函数,变量。 
使用了那些外部变量。等等。。。

下载地址:
http://sourceforge.net/project/showfiles.php?group_id=175776

时间: 2024-10-28 22:05:33

发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser的相关文章

发布一个开源极致的javascript模板引擎tpl.js

tpl.js(大家直接去https://git.oschina.net/tianqiq/tpl.js这个上面看) 简介 tpl.js是一个比较极致(极小,极快,极简单)的js模板引擎,可以在各种js环境中使用. 特性 1. 使用js作为模板语言,几乎无学习成本 2. 小巧,速度快到极致 3. 极简的语法,模板书写非常流畅 4. mit开源,无限制 语法说明 简述 tpl.js中模板语法中以行为单一,分为js行语句,和输出行语句.顾名思义,js行语句是编译时候会当做js执行的语句, 而输出行语句,

Node.js是一个事件驱动I/O服务端JavaScript环境

Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎.目的是为了提供撰写可扩充网络程序,如Web服务.第一个版本由Ryan Dahl于2009年发布,后来,Joyent雇用了Dahl,并协助发展Node.js. 其他编程语言的类似开发环境,包含Twisted于Python,Perl Object Environment于Perl,libevent于C,和EventMachine于Ruby.与一般JavaScript不同的地方,Node.js并不是在Web浏

前端优化分析 之 javascript引用位置优化

在很多优化法则中都提到,尽量将javascript放到页面底部,这是为什么呢 我通过firebug进行了下简单的分析 看下图  本页面首尾都存在javascript代码 我们分析得出 1.整个页面文档家在结束才开始加载css和js以及其他的数据 2.当顶部的所有js都家在结束之后才可以加载页面中的图片 3.顶部的common.css和common.js几乎是同时开始加载 4.底部的loader-min.js和离他最近的footer.jpg也是同时开始加载 由此,我们可以分析出,至少在这个版本的f

推荐15个最好用的 JavaScript 代码压缩工具

1. JavaScript Minifier It is a nice looking tool with an API to minify your js code. 2. JSMIni If you want to minify your JavaScript or jQuery files quickly and easily, turn to jsMini. Just copy and paste your source code, select whether you want bas

[深度好文]想成为一个高效的Web开发者吗?来看看大牛分享的经验吧~外加一些自己的理解

前言: 无意间浏览到此篇文章,发现这篇文章无论是对于新手程序员,还是学过几年的程序员,都是挺有帮助的.于是,在此分享,后面也有我自己的一些理解,希望能帮到更多的朋友. 作为一个软(ku)件(bi)工(de)程(ma)师(nong),你有没有觉得做什么事都没时间?没时间学习新东西,没时间去回顾.整理原来写的烂代码,没时间写单元测试,没时间给接管你项目的家伙写文档,没时间思考,没时间喘气,没!时!间! 额--如果你肯花点时间看看这篇文章,我相信你会明白应该把时间花在哪. 我曾以为成为一个技术大牛的唯

轻松学习JavaScript十一:JavaScript基本类型(包含类型转换)和引用类型

一值的类型 早在介绍JS的数据类型的时候就提到过基本类型和引用类型,不过在说两种类型之前,我们先来了解一下变量的 值的类型.在ECMAScript中,变量可以存在两种类型的值,即原始值和引用值. (1)原始值 存储在栈中的简单数据段,也就是说,它们的值直接存储在变量访问的位置. (2)引用值 存储在堆中的对象,也就是说,存储在变量处的值是一个指针,指向存储对象的内存处. 为变量赋值时,ECMAScript的解释程序必须判断该值是原始类型,还是引用类型.要实现这一点,解释程序则需 尝试判断该值是否

【转载】如何成为一个高效、快乐、健康的程序员

只需每天做一些小改变,就可摆脱病痛.保持健康.....学会去积累工作经验和成果就会变得高效......具备这些小习惯就会保持快乐…… 一:高效 互联网发展日新月异,社会科技每天都在发生着翻天覆地的变化,而程序员已经成了这个时代的庞大群体,各种各样的程序员数不胜数,我们每天上下班,不 论你是坐公交还是乘地铁,在你的身边一定有程序员.本人我就是其中的一员,本人主修java语言,从事java类开发工作.由于本人工作时间不长,经验尚 浅,都是学着前辈高人的路子,在慢慢前行,下面我给大家分享下,如何从菜鸟

轻松学习JavaScript五:JavaScript的变量和数据类型

对于一们编程语言,肯定包含变量和数据类型.今天我们就来看看JavaScript脚本语言的变量和数据类型.相对 于其他的Java,C++等高级程序语言,JavaScript显得很简单. 一变量 JavaScript的变量是松散类型的,所谓松散就是用来保存任何类型的数据.变量是存储信息的容器.定义变量时 要使用var操作符(var是关键字),后面跟一个变量名(变量名是标识符).变量也就是初始化后可以再次改变的量. 那么我们来看看实例: <span style="font-size:18px;&

JavaScript权威设计--JavaScript函数(简要学习笔记十)

1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"likeZqz()".有些些函数是用作内部用的或者为私有函数通常以一条下划线为前缀,就像"_zqzName()". 2.以表达式方式定义的函数 如: var zqz=function (){ return "zhaoqize"; } 在使用的时候必须把它赋值给一个变