swing 程序发布(一) pack200压缩

目前发布了一个swing 的程序,包括java web start 与applet 两个版本,但是由于第三方包的引入,发布包达到了近5MB,即使在局域网也让人无法忍受那缓慢的加载速度,毕竟对于绝大部分应用来说,网络带宽还是最终的系统瓶颈。

还好JDK5在Java Web Start和Java Plug-in中提供了对gizp和pack200压缩技术的支持,通过压缩将使Java的网络应用在jar的压缩基础上再一次的得到瘦身的飞跃。

gzip
jar包中包含的内容非Java类的资源文件比较多,例如JPEG, GIF等的,用gzip会比较合适

pack200
jar包绝大部分信息是class内容的话,那么pack200绝对是你的首选方案,因为pack200是专门针对class的java类进行优化设计的,主要体现在以下几个方面:

It merges and sorts the constant-pool data in the class files and co-locates them in the archive.
It removes redundant class attributes.
It stores internal data structures.
It use delta and variable length encoding.
It chooses optimum coding types for secondary compression.

压缩签名的整个发布过程

***/JDK5/bin/pack200 --repack demo.jar
--repack的作用等价与pack200和unpack200这两个指令,其作用是对demo.jar里面的class结构用Pack200的格式进行整理,因为签名需要根据jar包的类结构进行散列计算,所以如果不先进行jar的Pack200格式整理的话,等签名后再用pack200进行压缩将会导致签名无效,所以第一步需要进行--repack这个看似无用实则关键的操作
jarsigner -keystore myKeystore demo.jar ...
对Pack200格式整理过的demo.jar进行签名
***/JDK5/bin/pack200 demo.jar.pack.gz demo.jar
对签完名的demo.jar进行Pack200压缩,生成demo.jar.pack.gz

***/JDK5/sample/jnlp/servlet下面的jar包,主要是jnlp-servlet.jar拷贝到要发布的web工程的WEB-INF/lib/目录下
修改web发布工程的web.xml文件,将所有*.jnlp和*.jar的url路径定位到jnlp.sample.servlet.JnlpDownloadServlet进行处理
将demo.jar、demo.jar.pack.gz拷贝到jnlp或者applet指定的路径下
通过以上的操作一切就ok了,也许你想问jnlp和applet需要做什么改动吗,答案是no,一切都由JnlpDownloadServlet进行透明处理了,jnlp和applet里面的指向还是demo.jar,JnlpDownloadServlet自动会根据request的Accept-Encoding决定到底是下发demo.jar.pack.gz还是demo.jar,这样如果客户端安装了JDK5的Java Web Start或者Java Plug-in那么JnlpDownloadServlet自动会下发Pack200压缩的demo.jar.pack.gz包,如果客户端是JDK1.4或者更老的环境,那么JnlpDownloadServlet自然会下发demo.jar的普通包。

Pack200的压缩和解压缩速度是比较快的,而且压缩率也是很惊人的,在我是使用的包4.46MB压缩后成了1.44MB(0.322%),而且随着包的越大压缩率会根据明显,据说如果jar包都是class类可以压缩到1/9的大小。其实JavaWebStart还有很多功能,例如可以按不同的jar包进行lazy下载和单独更新,设置可以根据jar中的类变动进行class粒度的下载。心动不如行动,赶快去对你的发布程序进行瘦身吧。

参考:http://sailing8036.spaces.live.com/blog/cns!69D05DFD4294F487!479.entry
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值