利用GWT开发高性能Ajax应用(1)(2)
3. 图片打包
Ajax应用借助于浏览器和HTTP协议强大的分布力量,然而浏览器和HTTP协议本身对分布Ajax应用没有特别的优化。Ajax应用是需要部署 的,在这一点上它跟桌面应用程序有些相象,而传统的web程序使用的是共享资源分布模型(shared resource distribution model),在程序运行过程中浏览器和服务器间会不断进行交互,从而对页面所需要的资源进行管理。这种方式使资源能够在页面间共享和缓存,从而保证打开 新页面所需的下载量达到最小化。在Ajax应用中,资源一般不会分布在页面间,因此不需要单独对其进行下载缓存。不过,对于Ajax应用,在下载应用程序 资源时采用传统的分布式模型也并非不可行,许多Ajax应用也正是这么做的。
然而,你可以选择将程序中用到的所有图片合并到一个文件中,以减少HTTP请求的次数。这样可以突破同一时间只能发送两个请求的限制,一次性地下载所有图片。
GWT从1.4版本开始支持ImageBundle接口。在这个接口中可以为每一个图片建立一个方法,编译器会将所有的图片组合到一个文件中,并将 图片数据的Hash做为新文件的文件名(象程序代码一样永久缓存这个文件)。一次性打包合并的图片数量是没有限制的,所有这些图片只需要一次请求就可以全 部下载。
在已经完成的几个GWT项目中我一直沿用将基本图片打包的做法,以下是示例代码:
public interface Images extends ImageBundle {
/**
* @gwt.resource membersm.png
*/
AbstractImagePrototype member();
/**
* @gwt.resource away.png
*/
AbstractImagePrototype away();
/**
* @gwt.resource starsm.gif
*/
AbstractImagePrototype star();
/**
* @gwt.resource turn.png
*/
AbstractImagePrototype turn();
/**
* @gwt.resource user_add.png
*/
AbstractImagePrototype addFavorite();
}