您的位置:首页 > 大数据 > 人工智能

MonoRail学习笔记八:页面缓存的使用

2007-10-24 11:21 591 查看
以前版本中MonoRail是不支持页面缓存的,在1.0 RC3版中加入了页面缓存的支持,有了页面缓存之后会对性能有很大的提升。

主要是通过加入了一个新的属性CacheAttribute.cs,其实后台也是同样使用了System.Web下的缓存处理的机制

(以前Yok也写过一篇实现MonoRail页面缓存,他是通过编写自己的缓存类来实现的,效果也不错)

使用方法很简单,如下所示:

下面列出了主要的文件,要使用缓存只是在Controller下红色的一条语句

<html>

<head>

<title>测试页面</title>

</head>

<body>

<form action="/index.rails" method="post" >

ID:<input type="text" name="id" value="1"/><br />

姓名:<input type="text" name="name" value="姓名"/><br />

年龄:<input type="text" name="age" value="22"/><br />

生日:<input type="text" name="birthday" value="2007-1-1"/><br />

<input id="Submit1" type="submit" value="submit" />

</form>

</body>

</html>

Controller文件的Index方法:

[Cache(HttpCacheability.Public, Duration = 360, VaryByParams = "id,name")]

public void Index(int id, string name, int age, DateTime birthday)

<html>

<head>

<title>测试结果</title>

</head>

<body>

<form>

ID:$id<br />

姓名:$name<br />

年龄:$age<br />

生日:$birthday<br />

</form>

</body>

</html>
测试结果(在Index方法上设置断点):

第一次调用:进入断点,正常显示测试结果

第二次调用:(页面输入值不变),不进入断点,正常显示测试结果

第三次调用:(页面中年龄输入值改变),不进入断点,显示结果中年龄值还是之前的值

第四次调用:(页面中姓名输入值改变),进入断点,正常显示测试结果

第五次调用:(6分钟之后)),进入断点,正常显示测试结果

通过以上测试证明:MonoRail中的页面缓存是可以正常使用的,可以有效提高性能

实现机制简单分析:

在每个action执行之后,判断是否有Cache属性,如果有,就调用如下方法:

void ICachePolicyConfigurer.Configure(HttpCachePolicy policy)

{

policy.SetCacheability(cacheability);

policy.SetSlidingExpiration(slidingExpiration);

policy.SetValidUntilExpires(validUntilExpires);

policy.SetAllowResponseInBrowserHistory(allowInHistory);

if (duration != 0)

{

policy.SetExpires(DateTime.Now.AddSeconds(duration));

}

if (varyByCustom != null)

{

policy.SetVaryByCustom(varyByCustom);

}

if (varyByHeaders != null)

{

foreach(String header in varyByHeaders.Split(','))

{

policy.VaryByHeaders[header.Trim()] = true;

}

}

if (varyByParams != null)

{

foreach(String param in varyByParams.Split(','))

{

policy.VaryByParams[param.Trim()] = true;

}

}

if (etag != null)

{

policy.SetETag(etag);

}

}
好像也蛮简单的-_-,直接根据参数调用HttpCachePolicy类中的相应方法就可以了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: