`
jindw
  • 浏览: 505351 次
  • 性别: Icon_minigender_1
  • 来自: 初到北京
社区版块
存档分类
最新评论

休眠一年有余的JSA,优势依然

阅读更多
JSA是一个大概在2006年底开发的JS分析压缩工具,最初出现的时候相比同类产品,优势明显。
后来出现了yuicompressor,风光不再了,两者貌似压缩比例差距很小。都已经接近了语法压缩的极限。

无聊一下,分析一下相比YUI,JSA到底还有拉些优势呢,这可得用专业的眼光:

JSA 压缩结果
function group1(){var A;function $($,_){return $+_+$;}function _(){var _,A,$;function B($,_){return $+_+$;}}}function group3(){var B,_,$;function A($,_){return $+_+$;}}


YUI压缩结果
function group1(){var a;function b(e,d){return e+d+e}function c(){var e,h,g;function f(i,d){return i+d+i}}}function group3(){var c,a,d;function e(f,b){return f+b+f}};


查一下大小:JSA是168,YUI是166字节,怎么搞的,JSA怎么可能比YUI低呢?仔细一看,YUI是开启了语法补全的选项。
晕,跟我玩阴的!你是鸡蛋碰石头。

吧JSA “删除多余括弧”这个选项打开。165字节,差距太小了。

应该吧脚本搞复杂一点:
function group1(){var A;function $($,_){return $+_+$}function _(){var _=1,A=2,$;function B($,_){return $+_+$}}}function group3(){var B=1,_=2,$;function A($,_){return $+_+$}}

function group1(){var a;function b(e,d){return e+d+e}function c(){var e=1;var h=2;var g;function f(i,d){return i+d+i}}}function group3(){var c=1;var a=2;var d;function e(f,b){return f+b+f}};


结果是173->190
优势明显一点了。

将结果zip处理一下:85/106
优势进一步加大。

这些数据大家可能会觉得晕了,好了,我现在就解释一下产生这些差异的原因吧。

总结
1。语法优化上的优势:
   YUI在转换优化等价语法,去处可兼容语法,导致语法压缩结果本身差距,如合并var、如删除多余括弧,分号等,这方面能力相比JSA还有较大差距。
2。JSA也更有利于Gzip压缩
JSA 在变量重用的算法更好,对于类似的语法结构能翻译成相同的结果。
如函数“function $($,_){return $+_+$}”  JSA中三次出现相同结构,结果都翻译成相同的文本,而YUI是没有做到这点。
根据文本压缩的原理,只有重复率更高,才能达到更好的gzip压缩结果。


分享到:
评论
10 楼 Zehee 2009-06-11  
JSA压缩的时候好像喜欢用$做替代,恐怕会和不少框架冲突吧。

9 楼 jindw 2009-06-11  
nihongye 写道
我们实际的代码1.5MB,jsa+deflate下来,只有129kb,算下来0.0848,十分之一不到


1.5M
不简单啊,呵呵,偷偷问一下,是什么工程呢?
8 楼 whaosoft 2009-06-11  
哦 是这样啊  感谢楼主啊 我说 怎么好多 js框架都是怪怪的 原来是被压过~!~
7 楼 nihongye 2009-06-11  
我们实际的代码1.5MB,jsa+deflate下来,只有129kb,算下来0.0848,十分之一不到
6 楼 jindw 2009-06-11  
Army 写道
不压缩差1826

DeflateCompressionLevel: 1
jsa: 23535,yui: 24371
差836

DeflateCompressionLevel: 9
jsa: 19817, yui: 20465
差639

反而是压缩越厉害,差得越小了。

不过居然能到20k以下,这玩意儿可真厉害。



算比率:

未压缩:
jsa:63849, yui:65675.
比率是:0.9721964217738865

压缩后比率是
0.9656969348816216,0.9683361837283166


差距还是更大一点,不过,与我想象的差距还是差很远的。
看来理论和实际还是有差距的,我当时推断的一个先决条件是,代码中后相似代码,可貌似mootools代码质量挺好,没有这个,自然也就导致我推断结果的偏差了。


另外,新版的JSA默认是不开启语法括弧,分号兼容压缩的。这点和YUI就处在不公平竞争的地位了:(

5 楼 Army 2009-06-11  
不压缩差1826

DeflateCompressionLevel: 1
jsa: 23535,yui: 24371
差836

DeflateCompressionLevel: 9
jsa: 19817, yui: 20465
差639

反而是压缩越厉害,差得越小了。

不过居然能到20k以下,这玩意儿可真厉害。
4 楼 zbird 2009-06-11  
找个大头帮忙推广下(说服某个著名的库,如jquery啥,的用JSA提供mini包)。
3 楼 jindw 2009-06-11  
Army 写道
mootools 1.2.2

jsa:63849, yui:65675.


Gzip一下估计差距能更大一点
2 楼 Army 2009-06-11  
mootools 1.2.2

jsa:63849, yui:65675.
1 楼 jianfeng008cn 2009-06-11  
高!
   

相关推荐

    android 休眠和唤醒

    调用`goToSleep`时,你需要传入一个参数,即休眠原因的标识码,这有助于系统追踪休眠的原因,例如`PowerManager.SLEEP_REASON_USER`表示用户手动触发的休眠。 `wakeUp`方法则是用于唤醒设备的。当设备处于休眠状态...

    关于zigbee中的休眠程序

    首先,我们要理解Zigbee的几种不同休眠模式:空闲模式(Idle)、休眠模式(Sleep)和深度休眠模式(Deep Sleep)。空闲模式是设备在不发送或接收数据时进入的状态,但仍能监听网络活动;休眠模式则进一步降低功耗,...

    硬盘盒关闭自动休眠升级工具.zip

    标题中的“硬盘盒关闭自动休眠升级工具.zip”指出这是一个针对硬盘盒的软件工具,用于禁用硬盘的自动休眠功能。在IT领域,自动休眠是一种节能策略,旨在减少设备功耗,尤其是在长时间无操作时。然而,在某些场景下,...

    Qt5.10检测系统休眠

    在开发跨平台应用程序时,有时候我们需要检测系统的状态,比如是否处于休眠或唤醒状态。Qt是一个强大的跨平台应用开发框架,支持多种操作系统,包括Windows、Linux、macOS等。在这个场景下,我们关注的是如何在Qt...

    VB 代码 关机待机休眠

    VB 代码关机待机休眠 VB 语言是一种流行的编程语言,广泛应用于Windows 操作系统平台上。通过 VB 语言,我们可以实现各种功能强大的应用程序,包括关机、待机、休眠等操作。 在这个代码中,我们可以看到 VB 语言...

    S32K14x CAN休眠唤醒的实现

    S32K14x CAN休眠唤醒的实现 在本文中,我们将讨论S32K14x系列芯片的CAN休眠唤醒的实现方法。S32K14x系列芯片的CAN模块在普通模式下不支持休眠唤醒功能,但是在Pretended Networking模式下可以支持在STOP1和STOP2...

    Windows7 启动休眠模式 命令

    #### 三、休眠模式的优势与局限性 虽然休眠模式为用户带来了诸多便利,但它也存在一定的局限性。下面我们来分析一下它的优势与不足之处。 ##### 优势 1. **数据安全性**:即使在突然断电的情况下,数据也不会丢失...

    绿联ASM1153E芯片硬盘盒关闭休眠工具+教程

    标题中的“绿联ASM1153E芯片硬盘盒关闭休眠工具+教程”涉及到的主要知识点是关于硬盘盒硬件和软件优化的一个特定场景。这里我们可以深入解析一下相关的几个概念: 1. **绿联(UGREEN)**: 绿联是一家知名的消费类...

    JMS567_设置休眠的方法(9528RU3)2139去休眠.zip

    需要注意的是,长期取消休眠可能会增加硬盘的温度,因此建议确保硬盘盒有良好的通风条件,以防止过热。此外,如果你的硬盘是7*24小时连续工作的,建议定期进行检查和维护,以确保其健康状态。 总的来说,JMS567硬盘...

    revosleep让你挂载的大硬盘休眠的工具

    这不仅有助于环保,还能延长硬盘的使用寿命,因为硬盘在休眠状态下其机械部件不会持续运转。重新唤醒硬盘也非常简单,只需要鼠标点击几下即可,无需每次使用前都手动插拔硬盘,极大地提高了使用便利性。 在IT领域,...

    SIM7600 Open Linux 休眠唤醒应用文档_V2.02.pdf

    根据提供的文档信息,我们可以深入探讨SIM7600模块在Open Linux系统下的休眠与唤醒机制。这份文档主要关注的是如何有效地控制SIM7600模块进入休眠状态以及如何从休眠状态中唤醒模块。下面将详细解析文档中提到的关键...

    android原生设置休眠添加永不休眠选项

    资源为代码patch,主要修复设置-显示-休眠中无永不休眠选项。为防止语言资源导致报错,重新在arrays添加选项,永不休眠原理只是将时间设置为Integer.MAX_VALUE

    防止硬盘休眠,防止硬盘自动断电批处理程序。

    移动硬盘有休眠功能的朋友的福音!硬盘插上电脑后,看下移动硬盘盘符,先在c盘新建一个yes.txt记事本文件,然后用记事本打开下载的批处理文件如下: :noparms (c盘文件的位置)(移动硬盘位置) if exist yes.txt ...

    SIM7600CE-T休眠唤醒手册

    本文档是关于SIM7600CE-T四代LTE通信模块在嵌入式物联网领域的休眠唤醒应用手册,主要面向使用SIM7600OpenLinux系统的开发者们。文档中详细讲解了模块的休眠唤醒机制、流程以及操作方法,适用于开发者进行二次开发,...

    如何阻止Windows进入休眠状态?

    ### 如何阻止Windows进入休眠状态? 在日常工作中,我们可能会遇到这样的情况:正在运行一些重要的后台任务(如数据同步、文件传输等),但Windows系统却自动进入了休眠模式,导致这些任务被迫中断。为了防止这种...

    防止系统休眠程序.zip

    总的来说,这个“防止系统休眠程序”利用AutoIt的脚本功能,为用户提供了避免计算机休眠的解决方案,尤其适用于有特定电源管理策略的环境。用户只需要运行程序,并按照说明操作,就能确保电脑在需要的时候保持活跃...

    绿联JMS578芯片硬盘盒关闭休眠工具+教程

    针对这种情况,绿联提供了一款专门的“关闭休眠”工具,旨在帮助用户禁用硬盘盒的自动休眠功能,以保持设备持续运行。 JMS578芯片是由JMicron公司开发的一款USB到SATA桥接控制器,它能够将传统的SATA硬盘转换为USB...

    面向移动节点定位的传感器网络动态休眠调度机制

    ### 面向移动节点定位的传感器网络动态休眠调度机制 #### 摘要与背景 本文讨论了一种应用于移动传感器网络中的新型动态休眠调度机制——预唤醒动态休眠调度机制(P-SWIM)。传统的传感器网络为了延长网络寿命,...

    win快速休眠bat脚本

    win快速休眠bat脚本

Global site tag (gtag.js) - Google Analytics