论坛首页 Web前端技术论坛

脚本分析、压缩、混淆工具 JSA新版本发布,压缩效率提高大约10%

浏览 37092 次
该帖已经被评为良好帖
作者 正文
   发表时间:2007-06-02  
http://jsi.group.iteye.com/shares
这里可以下一个临时版本,自己修改资源文件.

新的版本将在近两周发布,将支持语言切换.
0 请登录后投票
   发表时间:2007-06-11  
LZ的东西不错,支持一下.
0 请登录后投票
   发表时间:2007-06-11  
的确是蛮不错的工具,赞赞^^
0 请登录后投票
   发表时间:2007-06-11  
LICENSE是什么的?LGPL?GPL?还是商用的?
0 请登录后投票
   发表时间:2007-06-12  
关于JavaScript基于LZ77算法(普通*.zip或*.png压缩是此算法的扩展实现)的压缩:

http://demo.java2script.org/lz77js/

如果不选“RegEx trimming before LZ77”选项,则展开为保持注释空格的源代码。其中压缩算法没有做混淆、分析的工作。另外解压代码约1k左右,使用了eval函数。

对于50K左右的源代码,可以压缩到50%左右;如果选了处理注释空格选项,则可以达到40%左右(普通*.zip压缩率为25%左右)。
0 请登录后投票
   发表时间:2007-06-12  
楼上的这个工具太好了,用 JSA 压缩后,再用楼上的工具压缩,还能减少近 1/5。而载入速度上感觉不到差异。

不过楼上这个工具压缩后的代码执行时会产生一个 ungzip 函数,而且这个函数的变量定义部分写的也不够精炼,不过可以通过手工修改进一步减少几十个字符,并且可以干掉 ungzip 函数。哈哈。

通过这个方法,PHPRPC 3.0 for JavaScript IE5 兼容版本压缩后,只有 15.8K 了!真是太棒了!
0 请登录后投票
   发表时间:2007-06-12  
非常不错,和楼上的相比,JSA的文本压缩显得太简单的:)
下一个版本的JSA将默认禁用文本压缩。

如果想最大限度的最求压缩效率,大家去尝试zhourenjian的文本压缩算法吧:)
0 请登录后投票
   发表时间:2007-06-12  
补充一下,zhourenjian的压缩算法,解压效率目前还不够优秀。大约是JSA的三倍。

此外压缩效果也因脚本而异,比如对jquery来说,lz77就没有优势。
0 请登录后投票
   发表时间:2007-06-12  
andot 写道
楼上的这个工具太好了,用 JSA 压缩后,再用楼上的工具压缩,还能减少近 1/5。而载入速度上感觉不到差异。

不过楼上这个工具压缩后的代码执行时会产生一个 ungzip 函数,而且这个函数的变量定义部分写的也不够精炼,不过可以通过手工修改进一步减少几十个字符,并且可以干掉 ungzip 函数。哈哈。

通过这个方法,PHPRPC 3.0 for JavaScript IE5 兼容版本压缩后,只有 15.8K 了!真是太棒了!


我记得unzip函数是当时经过大量修改的,当时我觉得应该是精炼得不能够再精炼了。当时的环境考虑为IE6.0/FF1.0/1.5和Opera 8.0。由于解压效率的问题,有些地方区分了浏览器以作效率优化。

Update: 重新看来一下那一年多前的代码,发现确实有一些多余字符,确实可以再少几十个字符。也可以写的更为精炼,不侵入其他名字空间等等。不过说实在话,一直以来我自己都没有怎么真正用压缩过后的*.js。

关于解压效率,也就是载入速度,只要脚本100k左右,基本上可以不用考虑;如果脚本原始大小超过100k,性能在IE或者Firefox上降低得比较厉害(Opera 8反而不受影响,Opera的JavaScript性能比较好的)。另外我觉得javascript级别的压缩对>100k的代码是错误的,还是用apache httpd server的mod_deflate吧。至于mod_deflate的用法可以参考:

http://inside.java2script.com/2007/06/05/compressing-and-deploying-javascript.html
0 请登录后投票
   发表时间:2007-06-13  
我将压缩后的代码改为了这种形式:

eval((function(s){var w=s.split(''),l=w.length,r=0,b=0,e=0,r=0,n=0,p=0,i=0,m=0x1000,h=0x800,g=0x5c,u=[],v=[],x=[],y=[],z=[],t="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.;,()=-+{}*/ []<>_$&|?:!%^\t'~@#`\\\"\r\n".split('');for(;i<t.length;i++){p=t[i];v[p]=p;y[p.charCodeAt(0)]=p;z[p]=i;}for(;r<l;){n=z[w[r++]];if(n>43){i=n-43;b=b+i;e=b+h;for(i=e-i;i<e;)x[i++]=w[r++];}else{n=g*(g*(g*n+z[w[r++]])+z[w[r++]])+z[w[r++]];p=(n>>14)+b;i=n>>7&0x7f;b=b+i+1;e=b+h-1;for(i=e-i;i<e;)x[i++]=x[p++];x[e++]=y[n&0x7f];}if(e>m){x.length=e;for(i=0;i<h;)x[i++]=null;u[u.length]=x.join('');for(i=0;i<h;)x[i++]=x[b++];b=0;}}z=y=w=null;x.length=b+h;for(i=0;i<h;)x[i++]=null;u[u.length]=x.join('');x=null;return u.join('');})("压缩后的字符串"));


这样就可以不侵入其他名字空间也减少了一些字符。
0 请登录后投票
论坛首页 Web前端技术版

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