[转]缓冲技术探讨(六)
2.7.3 使用Hidden Frame
你可以使用Hidden Frame在客户端缓存数据,这就避免了使用hidden field和使用view state时每次页面回送时的缓存数据往返。比如你可以秘密的加载多个页面所需要的图片,这并不会消耗服务器资源。
优点:
a. 可以加载较多数据而不只是单个栏位的值;
b. 避免了不必要的多次回送中的数据往来;
c. 可以缓存和读取在不同表单中存储的数据项(可以同时缓存多个页面的数据);
d. 可以访问同一站点不同frame中的客户端脚本数据。
缺点:
a. 有些浏览器不支持frame;
b. 源代码可以在客户端看到,有潜在的安全威胁;
c. 隐藏frame的数量没有限制,如果框架页面包含较多hidden frame的话,在首次加载时速度会有限制。
示例代码如下:
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的系统运行失败;
可能过期或被用户删除,造成一定程度的不可用。
参看示例代码:
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">
三、总结
本文档介绍了缓存和状态数据存储的相关概念,以及可供使用的缓存技术,介绍了各种技术的适用范围,并对其优缺点进行了说明,另外有简单的性能比较和简单的示例代码。更多内容请参看相应的参考资料。