以前版本中MonoRail是不支持页面缓存的,在1.0 RC3版中加入了页面缓存的支持,有了页面缓存之后会对性能有很大的提升。
主要是通过加入了一个新的属性CacheAttribute.cs,其实后台也是同样使用了System.Web下的缓存处理的机制
(以前Yok也写过一篇实现MonoRail页面缓存,他是通过编写自己的缓存类来实现的,效果也不错)
使用方法很简单,如下所示:
下面列出了主要的文件,要使用缓存只是在Controller下红色的一条语句
测试Html文件
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><html>
<head>
<title>测试页面</title>
</head>
<body>
<formaction="/index.rails"method="post">
ID:<inputtype="text"name="id"value="1"/><br/>
姓名:<inputtype="text"name="name"value="姓名"/><br/>
年龄:<inputtype="text"name="age"value="22"/><br/>
生日:<inputtype="text"name="birthday"value="2007-1-1"/><br/>
<inputid="Submit1"type="submit"value="submit"/>
</form>
</body>
</html>
Controller文件的Index方法:
[Cache(HttpCacheability.Public,Duration=360,VaryByParams="id,name")]
publicvoidIndex(intid,stringname,intage,DateTimebirthday)
{
PropertyBag.Add("id",id);
PropertyBag.Add("name",name);
PropertyBag.Add("age",age);
PropertyBag.Add("birthday",birthday);
}
注意上面红色标示的代码
我这里只是列出了一种常用的方式,Duration表示缓存有效期是360秒,VaryByParams指定当id或者name的参数值改变了才重新生成此页面,否则不用调用此方法,直接使用缓存中的页面,HttpCacheability定义可以参照MSDN中的解释:
NoCache:设置 Cache-Control: no-cache 标头。如果没有字段名,则指令应用于整个请求,且在满足请求前,共享(代理服务器)缓存必须对原始 Web 服务器强制执行成功的重新验证。如果有字段名,则指令仅应用于命名字段;响应的其余部分可能由共享缓存提供。
Private:默认值。设置 Cache-Control: private 以指定响应只能缓存在客户端,而不能由共享(代理服务器)缓存进行缓存。
Public:设置 Cache-Control: public 以指定响应能由客户端和共享(代理)缓存进行缓存。
Server:指定响应仅缓存在源服务器上。与 NoCache 选项相似。客户机接收 Cache-Control: no-cache 指令,但文档是在原始服务器上缓存的。
ServerAndNoCache:应用 Server 和 NoCache 的设置指示在服务器上缓存内容,而对服务器以外的其他对象都显式否定其缓存响应的能力。
ServerAndPrivate:指示响应只能在服务器和客户端缓存。代理服务器不能缓存响应。
index.vm文件
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><html>
<head>
<title>测试结果</title>
</head>
<body>
<form>
ID:$id<br/>
姓名:$name<br/>
年龄:$age<br/>
生日:$birthday<br/>
</form>
</body>
</html>
测试结果(在Index方法上设置断点):
第一次调用:进入断点,正常显示测试结果
第二次调用:(页面输入值不变),不进入断点,正常显示测试结果
第三次调用:(页面中年龄输入值改变),不进入断点,显示结果中年龄值还是之前的值
第四次调用:(页面中姓名输入值改变),进入断点,正常显示测试结果
第五次调用:(6分钟之后)),进入断点,正常显示测试结果
通过以上测试证明:MonoRail中的页面缓存是可以正常使用的,可以有效提高性能
实现机制简单分析:
在每个action执行之后,判断是否有Cache属性,如果有,就调用如下方法:
配置Asp.Net缓存机制
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->voidICachePolicyConfigurer.Configure(HttpCachePolicypolicy)
{
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(StringheaderinvaryByHeaders.Split(','))
{
policy.VaryByHeaders[header.Trim()]=true;
}
}
if(varyByParams!=null)
{
foreach(StringparaminvaryByParams.Split(','))
{
policy.VaryByParams[param.Trim()]=true;
}
}
if(etag!=null)
{
policy.SetETag(etag);
}
}
好像也蛮简单的-_-,直接根据参数调用HttpCachePolicy类中的相应方法就可以了
分享到:
相关推荐
:monorail: 单轨| 网络设计系统Monorail for React帮助开发人员执行。 这些组件由SimSpace的工程师和UX设计师的核心团队开发,可实现可靠的开发工作流程,以构建美观且功能强大的Web项目。快速开始将Monorail添加到...
MonoRail学习笔记一:一个小例子 随着微软放出消息,准备发布MVC的框架,各种议论纷至沓来。 以前用java、jsp对它的MVC结构、集中控制印象特别深刻,自从用了.NET后,虽然webform的控件很好用,总感觉有点怪怪的 ...
本资源包含“MonoRail基础学习文档”和“实例”,旨在帮助初学者快速入门并深入理解MonoRail的使用。 首先,让我们详细了解 MonoRail 的核心概念: 1. **Controller**:在MonoRail中,Controller是处理用户请求的...
它们可用于使用任何长的、最好是高质量的序列(例如来自另一个基因组草图的 scaftigs/contigs)来构建和完成高质量的基因组草图组装。 它们都依赖于准确的长 DNA 序列来修补现有基因组组装草案中的空白。 Cobbler...
MonoRail是 Castle Project 的一部分,它是一个开源的、基于.NET框架的Web应用程序开发框架,设计用于替代ASP.NET Web Forms,提供了更面向对象...继续学习和探索MonoRail的其他功能,将帮助你充分利用这个强大的框架。
Monorail,中文名单轨列车,是针对.NET平台的一个早期...通过深入理解Monorail,开发者可以更好地理解现代Web框架的设计原则,这将有助于他们在使用其他类似框架(如ASP.NET MVC、ASP.NET Core MVC等)时更加得心应手。
Kirby + Vue.js入门套件主要特征 :motorway: 自动路由 :magnifying_glass_tilted_left: SEO友好:元标记 :globe_with_meridians: :wheelchair_symbol: 无障碍前端路由 :monorail: :dizzy: 页面数据 :high_voltage: ...
3. **性能优化**:学习如何通过缓存、负载均衡、异步处理等手段提升服务器性能。 4. **安全性**:学习如何在Monorail中实现安全的HTTP通信,如HTTPS和认证机制。 最后,如果你的“学习资料”是指实际的物理单轨铁路...
Monorail框架提供了`PaginationHelper.CreateCustomPage`方法来实现自定义分页功能,帮助开发者更灵活地控制页面数据的展示方式。 #### 二、Monorail框架简介 Monorail是基于.NET平台的一个MVC(Model-View-...
你可以通过查看和分析这些文件来深入了解如何在Monorail项目中实际使用和配置过滤器。 总的来说,Monorail的过滤器机制提供了强大的功能,可以帮助开发者在不侵入业务逻辑的情况下增强应用程序的功能和安全性。通过...
《MonoRail:构建高效Web应用的框架探索》 MonoRail,这个名字在IT行业中或许并不如ASP.NET那样耳熟能详,但它却是.NET平台上的一个强大且灵活的Web应用程序框架。"ShoppingCart-MonoRail.rar"这个压缩包,包含了对...
本教程将引导你逐步了解MonoRail的基本概念和使用方法,包括filter、home、rescue、routing和layout这五个关键部分。 1. **MonoRail框架介绍** MonoRail是由Castle Project开发的,它借鉴了Ruby on Rails的设计...
MonoRail支持多种视图引擎,如NVelocity或NHaml,允许开发者使用模板语言编写动态页面。 4. **模型(Models)**: 模型包含业务逻辑和数据,它们是应用程序的核心。在MonoRail中,模型类可以直接与数据库交互,或者...
此外,Monorail项目可能与其他服务集成,例如通过API与社交媒体平台共享内容,或者使用第三方服务进行垃圾信息过滤。 7. 测试与部署 在开发过程中,单元测试和集成测试是必不可少的,以确保每个组件都能正常工作。...
MonoRail实体类生成器是一款专为Castle MonoRail框架设计的工具,旨在提高开发效率,减少程序员手动编写实体类的工作量。MonoRail是.NET平台上的一款轻量级MVC(Model-View-Controller)框架,它提供了丰富的功能和...
MonoRail、IBatisNet 和 Velocity 是三个在C#开发中常用的技术框架,它们分别用于不同的领域,但在实际项目中常被结合使用以构建高效、灵活的Web应用。下面将详细介绍这三个技术及其组合使用的要点。 **MonoRail** ...
5. **创建视图**:使用MonoRail的视图引擎(如NVelocity或NHaml)编写HTML模板,显示数据并接收用户输入。 6. **数据库操作**:通过iBATIS.NET的SqlMap对象执行CRUD操作,如查询、插入、更新和删除数据。 7. **...
Monorail,中文常被称为“单轨框架”,是.NET平台上的一款轻量级Web应用程序...在深入学习Monorail时,你还会发现它对测试驱动开发(TDD)友好,支持依赖注入(DI)以及插件架构,这些都是它成为开发者选择的重要因素。
MonoRail是.NET平台上的一款轻量级的Web应用框架,它为开发者提供了强大的MVC(Model-View-Controller)模式支持,旨在提供比ASP.NET更灵活、更可扩展的开发环境。在 MonoRail 中实现文件上传功能,特别是整合...