silverlight 中的应用程序库缓存
时间:2011-03-21 来源:Skiper
为何要使用缓存?
在日常的开发工作中,缓存这个名字对大家来说是再熟悉不过了,确实,合理的使用缓存技术,对于提高性能,节省资源和改善用户体验起着非常重要的作用。做过web程序开发的人可以想像一下,如果没有Cookie,Session,Cache,ViewState这些东西,那将会怎样?除此之外,在桌面程序,数据库中,甚至我们的计算机操作系统本身都用到了很多很多的缓存机制,这就是一个比较大的话题了。那么在silverlight中使用缓存到底有多重要呢?
与一般的web程序不一样,在启动一个silverlight应用程序的时候,都得先加载一个后缀名为.xap的文件(一个压缩文件)。只有当整个文件加载完毕后,才能看到用户界面,这也就意味着,用户在使用silverlight的时候需要一个等待时间,但是随着这个xap文件越来越大,这也就意味着用户等待的时间也是越来越长。为了解决这样的问题,可以这样做:拆分应用程序到不同的子项目中,生成各个功能模块的xap文件,最后在主项目中按需加载这些文件。
但是有些时候,项目中需要引用第三方的库,而且这些库如果很大很大.......这当然也没问题,只需要把它们打包成xap文件,然后按需加载就可以了。当然如果你愿意每次都写一遍通过WebClinet来加载外部的xap文件,那也是没问题的,但是如果通过silverlight的应用程序库缓存也能帮你解决这问题呢?你是否会考虑下呢?:)如果你要在项目中使用比较大的第三方库,试试Application Library caching吧。它能帮你做很多工作,通过简单的步骤,它就可以为你产生一个分离的xap文件,并在项目中按需加载。如果你有兴趣,那接下来就来一起看看这是如果实现的呢?
xap文件怎么越变越大?
在使用应用程序库缓存之前,我们先来了解下xap文件中到底发生了什么。
首先我们创建一个简单的项目:接下来,看看解决方案浏览器下面,Reference下面:
可以看到,项目默认引用的一些程序集,此时,我们还看不到xap文件,我们编译下项目
看到了没?在ClientBin目录下生成了一个xap文件。
找到它后,修改该文件的后缀名为zip,看到了在它里面有一个xaml文件和一个dll文件
为了探个究竟,我们用记事本打开xaml文件,看到如下结果:
可以看到,这里是关于引用的dll文件的相关信息,包括Entry Point ,AssemblyPart,RuntimeVersion等信息。
接下来,我们来引用一些第三方程序集,看看到底有什么变化
编译项目,再打开xap看看:
可以看到多了我们引用的dll文件,再看看xaml中的变化,可以看到,里面定义了所引用的dll文件的相关信息。
从上面这些简单的例子可以看出,很明显,由于引用了额外的dll文件,使得xap压缩文件越来越大。知道了这些,接下来,我们就来使用应用程序库缓存,来处理这些问题吧。
使用应用程序库缓存
首先,打开项目的属性面板,在silverlight标签下,可以看到一个“Reduce XAP size by using application library caching”选项,在前面打上勾。
编译项目后,可以看到,系统自动为外部引用的dll文件产生了一个对应的zip压缩文件。在压缩文件中正是新引用的dll文件。
此时,在ClientBin目录下多了两个zip文件
就和之前没使用缓存一样,来看看xap文件中的情况:
看到没?和最开始没有引用第三方dll一样,里面根本就没有增加,接着打开xaml文件看下
这样我们可以很清楚看到,没有看到新添加的dll文件,而是以额外的部分指向了这些文件所在的压缩文件。这样当你运行程序的时候,加载的只是主要的资源文件,而这些额外的dll库文件将会在被需要用到的时候加载。不过不能忘了这次的主题是缓存,因此在首次加载的时候,这些额外的dll(zip文件中的)也将被一同加载,接着将被缓存到浏览器中,当下次再次访问时,用户将只加载xap文件。