有时,我们的web应用程序在一定的时间范围内对于某些页面来说是不会变化的,例如HR站点中,员工工资信息不会频繁地变动,它们在一个月一般只变动一次。一般来说都是在一个月的第一天发生变化。所以,对特定的员工来说,一个月中这个员工的页面内容是不会变化的。所以,把这些页面在服务器上缓存起来以避免每次请求重新计算的过程,这真是个不错的主意。为了达到这个目的,.NET为我们提供了在服务端指定特定时间缓存输出页面的特性;它也提供了缓存页面片段的特性。在这儿我不再详细去描述这种缓存方法了,因为网络上有很多关于这方面的详细介绍。这是一个非常长的部分如果我们现在讨论它,我计划在其它章节去讨论它。
复制代码 代码如下:
<!-- VaryByParm - different versions of same page will be
cached based on the parameter sent through HTTP Get/Post
Location - where the page is cached -->
<%@OutputCache Duration="60" VaryByParam="empNum"
Location="Server"%>
我们来对比一下我们所讨论的这些缓存:
方法
是否支持网站群?
备注 ASP.NET Session State
- InProc
- StateSerer
- SQLServer
No
Yes
Yes
ASP.NET Application Object
No
ASP.NET Cache Object
No
.NET Remoting
Yes
Memory-Mapped files
No
Static Variables
No
Database
Yes
ASP.NET Page Output Caching
No
客户端缓存管理
在上面章节中我们讨论了在服务端的不通缓存方式,但有时我们希望能在客户端缓存数据和页面以提高性能。使用客户端缓存可以降低服务端的负载压力,但这种缓存机制却存在安全问题因为数据是存储在客户端。在客户端缓存也有不同的方式,我将简单地谈到几种。
Cookies
Cookie对web开发人员中是非常熟悉的概念,Cookie存储在客户端,当客户端每次发送请求时都会将它发送到服务端,服务端响应时也会把它发回到客户端。因为它限制了字节数(4096个字节),所以它只能缓存比较小的数据。它可以使用过期策略使它在一段特定的时间之后失效。下面的例子显示了在ASP.NET中如何使用Cookie。
复制代码 代码如下:
if (this.Request.Cookies["MY_NAME"] == null)
{
this.Response.Cookies.Add(new HttpCookie("MY_NAME",
"Shubhabrata Mohanty"));
}
else
{
this.Response.Write(this.Request.Cookies["MY_NAME"].Value);
}
ViewState
.NET ViewState是一个新的概念。和页面相关的数据和控件都是存储在ViewState,这些保留值可以跨多个请求道服务器。如果你还记得,在VB-ASP应用开发中跨多个请求存储数据是通过Hidden控件的。事实上ViewState在ASP.NET是隐藏控件的内部实现,但对比隐藏控件它做了散列化以增加安全性。去看ViewState是如何实现的,你可以打开页面查看源代码。ViewState也不能存储大量数据因为它每个请求都会发送到服务端。
复制代码 代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (this.ViewState["MY_NAME"] == null)
{
this.ViewState["MY_NAME"] = "Shubhabrata Mohanty";
}
//txtName is a TextBox control
this.txtName.Text = this.ViewState["MY_NAME"].ToString();
}
Hidden fields
