充分利用浏览器缓存
·持续使用URLs
基于 URL的浏览器缓存内容。当URL变化时,浏览器会从源服务器拿取一个新的版本。URL可以通过改变查询字符串参数来改变。例如,/default.aspx 被缓存到了浏览器上。如果你请求/default.aspx? 123,则系统会重新从服务器上去拿一个新版本。如果你返回正确的缓存头,则来自新的URL响应也能够缓存到浏览器中。如果那样的话,改变一些查询字符串参数比如像/default.aspx ?456将会从服务器上返回新的内容。
因此,你需要确保当你需要获得缓存响应的时候在每个地方使用持续这个URL。从主页上,如果你请求了一个URL为/welcome.gif的文件,确保从另一个页面你使用了相同的URL进行了请求。一个常见的错误就是有时会从URL的子域“www”进行发射。
www.pageflakes.com/default.aspx和pageflakes.com/default.aspx是不同的,两者都被单独进行了缓存。
·缓存静态内容更长时间
可以静态文件缓存更长的时间,比如1个月。如果你正在思考你应该将其缓存两天以便当你改变文件时,用户可以得到更快的响应,这样看你就错了。如果你更新了一个通过缓存头的文件,新用户将会立即获得新的文件而之前的用户将仍然看到的是更新前的内容直到浏览器上的期满日期。因此,只要你使用了期满头来缓存静态内容,你就应该为它分配一个尽可能高的值。
例如,如果你设置期满头缓存一个文件为三天,一个用户今天获得了一份该文件并且在接下来的三天都存储在缓存中。另一个用户明天将获得这个文件然后在明天后的三天缓存它。如果你后天改变了这个文件,则第一个用户将在第四天看到它而第二个用户将在第五天看到它。因此,不同的用户将看到不同版本的文件。由此,设置的值较低并没有多大帮助。你将不得不改变文件的URL以便确保每个人都能及时地拿到实际相同的最新文件。
你可以从IIS管理器总配置静态文件的期满头。你将会在后面部分了解到如何实现。
·使用缓存友好的文件夹结构
将缓存内容存储在一个普通的文件夹下。例如,将你站点上的所有图片文件存储在/static文件夹下而不是单独存储在不同的子文件夹下。这将帮助你使用持续的URL贯穿整个站点,因为从站点的任何地方你都能够使用/static/images/somefile.gif。后面,当你的静态缓存文件位于一个共通的跟文件夹下时,我们将学习一种更简单的方式来将文件移动到一个内容传递网络中。
·重用共通的图像文件
有时候我们需要放置一些共通的图像文件到多个虚拟目录下以便我们能够写些更小的路径。例如,假如在根文件夹中有一个indicator.gif 文件,以及一些子文件夹和CSS文件夹。你会很放心因为你不需要担心来自不同地方的路径并且你仅仅需要使用文件的名称即可作为相对URL。在缓存中,这并没有多大帮助。每个文件的副本都被单独地缓存到浏览器中了。因此,你应该在整个解决方案中聚集所有的图像文件并放置它们到相同的静态文件夹下面来减少这种复制,进而达到对所有的页面和CSS文件使用相同的URL。
·当你想要缓存期满时,改变文件名称
当你想要改变一个静态文件时,不要仅仅只是更新文件,因为它已经缓存到用户的浏览器中了。你需要改变文件名称并更新所有与之相关的引用以便浏览器下载新的文件。你也可以存储文件名到数据库中或者配置文件中并使用数据绑定来动态产生URL。这种方式使你可以从一个地方改变URL并且使得整个站点立即接收到这种改变。
·访问静态文件时,使用一个版本号
如果你不想将你的相同文件存储多个副本到你的静态文件夹中,你可以使用查询字符串来区别相同文件的不同版本。例如,一个像like /static/images/indicator.Gif? v=1的查询字符串用来访问一个GIF格式的图片。当你改变indicator.gif的时候,你可以重写相同的文件然后更新所有到文件/static/images/indicator.gif?v=2的引用,这种方式可以保持相同文件的不断变化并仅仅使用新的版本号更新所引用的图像.