论坛首页 Web前端技术论坛

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

浏览 14119 次
精华帖 (6) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-11   最后修改:2009-06-11
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压缩结果。


   发表时间:2009-06-11  
高!
   
0 请登录后投票
   发表时间:2009-06-11  
mootools 1.2.2

jsa:63849, yui:65675.
0 请登录后投票
   发表时间:2009-06-11  
Army 写道
mootools 1.2.2

jsa:63849, yui:65675.


Gzip一下估计差距能更大一点
0 请登录后投票
   发表时间:2009-06-11  
找个大头帮忙推广下(说服某个著名的库,如jquery啥,的用JSA提供mini包)。
0 请登录后投票
   发表时间:2009-06-11  
不压缩差1826

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

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

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

不过居然能到20k以下,这玩意儿可真厉害。
0 请登录后投票
   发表时间: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就处在不公平竞争的地位了:(

0 请登录后投票
   发表时间:2009-06-11  
我们实际的代码1.5MB,jsa+deflate下来,只有129kb,算下来0.0848,十分之一不到
0 请登录后投票
   发表时间:2009-06-11  
哦 是这样啊  感谢楼主啊 我说 怎么好多 js框架都是怪怪的 原来是被压过~!~
0 请登录后投票
   发表时间:2009-06-11  
nihongye 写道
我们实际的代码1.5MB,jsa+deflate下来,只有129kb,算下来0.0848,十分之一不到


1.5M
不简单啊,呵呵,偷偷问一下,是什么工程呢?
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics