休眠一年有余的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压缩结果。


你可能感兴趣的:(YUI,Mootools,IDEA,prototype,Ant)