[转]缓冲技术探讨(六)

2.7.3  使用Hidden Frame
你可以使用Hidden Frame在客户端缓存数据,这就避免了使用hidden field和使用view state时每次页面回送时的缓存数据往返。比如你可以秘密的加载多个页面所需要的图片,这并不会消耗服务器资源。

优点:

a.     可以加载较多数据而不只是单个栏位的值;

b.     避免了不必要的多次回送中的数据往来;

c.     可以缓存和读取在不同表单中存储的数据项(可以同时缓存多个页面的数据);

d.     可以访问同一站点不同frame中的客户端脚本数据。

缺点:

a.     有些浏览器不支持frame;

b.     源代码可以在客户端看到,有潜在的安全威胁;

c.     隐藏frame的数量没有限制,如果框架页面包含较多hidden frame的话,在首次加载时速度会有限制。

示例代码如下:

 1<FRAMESET cols="100%,*">
 2<FRAMESET rows="100%,*">
 3<FRAME src=http://blog.csdn.net/yashira/archive/2007/01/10/"contents_of_frame1.html">
 4</FRAMESET>
 5<FRAME src=http://blog.csdn.net/yashira/archive/2007/01/10/http://blog.csdn.net/yashira/archive/2007/01/10/"contents_of_hidden_frame.html">
 6<FRAME src=http://blog.csdn.net/yashira/archive/2007/01/10/"contents_of_hidden_frame.html" frameborder="0" noresize scrolling="yes">
 7<NOFRAMES>
 8<P>This frameset document contains:
 9<A href="contents_of_frame1.html" TARGET="_top">Some neat contents</A>
10</NOFRAMES>
11</FRAMESET>

2.7.4  使用Cookies
Cookie是可以在客户端存储数据另一种方案,这里不过多介绍。

优点:

不需要服务器资源;数据保存在客户端,在用户请求时发送到服务器上。
使用简单。Cookie包含简单的键值对,主要保存轻量级的文本数据。
支持过期策略;可以指定当会话结束时过期,也可指定一个时间策略。
缺点:

数据量的限制;
用户可能设置为拒绝Cookie;
安全问题;用户可能更改机器上的cookie信息,造成基于cookie的系统运行失败;
可能过期或被用户删除,造成一定程度的不可用。
参看示例代码:

 1public class CookiesSample : System.Web.UI.Page
 2{
 3    private void Page_Load(object sender,  System.EventArgs e)
 4    {
 5      if (this.Request.Cookies["preferences1"== null)
 6      {
 7        HttpCookie cookie = new HttpCookie("preferences1");
 8        cookie.Values.Add("ForeColor","black");
 9        cookie.Values.Add("BackColor","beige");
10        cookie.Values.Add("FontSize","8pt");
11        cookie.Values.Add("FontName","Verdana");
12        this.Response.AppendCookie(cookie);
13       }

14     }

15     private string getStyle(string key)
16     {
17       string val = null;
18       HttpCookie cookie= this.Request.Cookies["preferences1"];
19       if (cookie != null)
20       {
21         val = cookie.Values[key];
22       }

23       return val;
24     }

25 }

2.7.5  使用Query String
Query String是在用户请求的URL后加上相应的参数来使用的,只能在使用HTTP GET方式调用URL时可用。

优点:

d.     不需要服务器资源,参数附在URL里面;

e.     应用面广,几乎所有浏览器都支持;

f.     实现简单,服务端使用Request对象可直接读取。

缺点:

a.     参数直接对用户可见,不安全;

b.     URL长度的限制,多数浏览器不支持超过255字符的URL。

示例代码:

http://www.cache.com/login.asp?user=ronen

string user = Request.QueryString["User"];

2.7.6  小结
下表是使用客户端缓存的建议:

缓存机制
 适用情况
 
Hidden Field
 当安全性要求不高时,在页面中存储少量数据以提交到服务器上的本页面或其它页面。
 
ViewState
 在单个页面中存储少量信息满足页面多次回传的要求。提供基本的安全机制。
 
Hidden Frame
 在客户端存储数据,避免了数据到服务器的回传。
 
Cookie
 当安全性要求不高时,存储少量数据在客户端。
 
Query String
 当使用页面地址连接页面时传输少量参数。 

2.8             使用Internet Explorer缓存
IE提供了缓存机制,可以实现对页面的数据进行缓存,同时可以指定过期时间。用户在IE中请求此页面,如果当过期时间没有到,则自动从缓存中提取并呈现;否则,就到服务器上获取新版本。IE对页面的缓存可以在IIS中设置。

适合在Internet Explorer中缓存的内容

页面中的图像文件;
静态的文本内容;
页面的标题栏和页脚内容——改变频率很低,可以给用户一个迅速相应;
网站的首页——更改次数页时相对较少的;
使用动态HTML在客户端保存的特定数据。比如客户自定义的颜色和布局设置信息。
优点:

减少对服务器的请求和网络负担;
支持离线浏览;
可以实现基于XML的客户端复杂应用。
缺点:

客户端的过期时间必须预先指定而不能依赖于服务器更新;IE采用的是Lazy更新机制,优先从缓存中提取数据;
对其它客户端浏览器没有作用;
存储的数据没有加密,不能保证客户端数据安全。
示例代码:

<META HTTP-EQUIV="expires" CONTENT="Tue, 23 Jun 2002 01:46:05 GMT">

三、总结
本文档介绍了缓存和状态数据存储的相关概念,以及可供使用的缓存技术,介绍了各种技术的适用范围,并对其优缺点进行了说明,另外有简单的性能比较和简单的示例代码。更多内容请参看相应的参考资料。

posted on 2008-06-18 20:00  Xuemin_Zhang  阅读(220)  评论(0编辑  收藏  举报