利用客户端缓存对网站进行优化的原理分析第2/2页

 更新时间:2008年09月04日 11:06:16   作者:  
你的网站在并发访问很大并且无法承受压力的情况下,你会选择如何优化?

复制代码 代码如下:

1 //默认缓存的秒数
2 int secondsTime = 100;
3
4 //判断最后修改时间是否在要求的时间内
5 //如果服务器端的文件没有被修改过,则返回状态是304,内容为空,这样就节省了传输数据量。如果服务器端的文件被修改过,则返回和第一次请求时类似。
6 if (request.Headers["If-Modified-Since"] != null && TimeSpan.FromTicks(DateTime.Now.Ticks - DateTime.Parse(request.Headers["If-Modified-Since"]).Ticks).Seconds < secondsTime)
7 {
8 //测试代码,在这里会发现,当浏览器返回304状态时,下面的日期并不会输出
9 Response.Write(DateTime.Now);
10
11 response.StatusCode = 304;
12 response.Headers.Add("Content-Encoding", "gzip");
13 response.StatusDescription = "Not Modified";
14 }
15 else
16 {
17 //输出当前时间
18 Response.Write(DateTime.Now);
19
20 //设置客户端缓存状态
21 SetClientCaching(response, DateTime.Now);
22 }
23
24 #region SetClientCaching..
25 /// <summary>
26 /// 设置客户端缓存状态
27 /// </summary>
28 /// <param name="response"></param>
29 /// <param name="lastModified"></param>
30 private void SetClientCaching(HttpResponse response, DateTime lastModified)
31 {
32 response.Cache.SetETag(lastModified.Ticks.ToString());
33 response.Cache.SetLastModified(lastModified);
34 //public 以指定响应能由客户端和共享(代理)缓存进行缓存。
35 response.Cache.SetCacheability(HttpCacheability.Public);
36 //是允许文档在被视为陈旧之前存在的最长绝对时间。
37 response.Cache.SetMaxAge(new TimeSpan(7, 0, 0, 0));
38 //将缓存过期从绝对时间设置为可调时间
39 response.Cache.SetSlidingExpiration(true);
40 }
41 #endregion

如果你的缓存是基于文件的方式,如XML或http中的.ashx处理,也可以使用下面的基于文件方式的客户端缓存:

复制代码 代码如下:

1 #region SetFileCaching..
2 /// <summary>
3 /// 基于文件方式设置客户端缓存
4 /// </summary>
5 /// <param name="fileName"></param>
6 private void SetFileCaching(HttpResponse response, string fileName)
7 {
8 response.AddFileDependency(fileName);
9 //基于处理程序文件依赖项的时间戳设置 ETag HTTP 标头。
10 response.Cache.SetETagFromFileDependencies();
11 //基于处理程序文件依赖项的时间戳设置 Last-Modified HTTP 标头。
12 response.Cache.SetLastModifiedFromFileDependencies();
13 response.Cache.SetCacheability(HttpCacheability.Public);
14 response.Cache.SetMaxAge(new TimeSpan(7, 0, 0, 0));
15 response.Cache.SetSlidingExpiration(true);
16 }
17 #endregion



上图所使用的工具是在IE下运行的HttpWatchPro,在Firefox下可以使用FireBug+YSlow进行测试.
YSlow是建立在FireBug基础上运行的一个小工具,它可以对你的网页进行分析为什么缓存,并给出评分和缓慢的原因.这个工具来自Yahoo的研发团队,所以规则也是Yahoo制定的.

结论
我们已经看了如何使用客户端缓存减少带宽和计算的方法,如前所述,如果能正确合理的利用各种不同的缓存,他们会给你带来很多的好处.我希望本文已为你当下或将来基于Web的项目提供了精神食粮,并正确地在底层利用Last-Modified和ETag响应头去优化你的项目。

相关文章

最新评论