Yok

苦海无涯,回头是岸啊

实现MonoRail页面缓存

monorail是一个mvc模式的web框架, 它完全抛弃了传统的webform. 很多朋友都担心monorail会存在性能问题. 一个原因是它大量使用反射, 一个是它的velocity页面模板是解释执行(monorail有编译执行的brail模板引擎, 但是通常由于学习成本及它未及velocity成熟的因没有被采用). 当然webform复杂的生命周期, 控件结构及viewstate机制也是性能的瓶颈. 经过简单的测试, 总体来说monorail会比webform慢5%左右.

我感觉到更大的问题是monorail的官方并不支持页面级缓存. 页面缓存对互联网应用来说是很重要的, 因为网站读操作的频率要远远大于写, 而且还会不幸碰上无耻的爬虫和发广告软件的攻击. 我反编译了跟缓存相关的.net framework代码后, 发现它和webform完全无关, 管理页面缓存的System.Web.Caching.OutputCacheModule在HttpApplication的ResolveRequestCache事件中寻找是否有可用的缓存, 在UpdateRequestCache事件中检查当前HttpResponse的CachePolicy, 决定是否要把Response的内容缓存起来. 所以任何形式的asp.net应用程序都可以使用它, 只需要设置好当前的HttpResponse的CachePolicy. 在webform里页面缓存是作为预编译指令标记在aspx里, 在monorail中, 典型的的做法就是为controller编写一个facility, 然后通过自定义的Attribute去指定缓存相关的属性.

这个facility很简单: 定义一个的Attribute用来标记在controller和action上, 属性照搬@outputcache指令的参数Duration, Location, VaryByParam, VaryByHeader, VaryByCustom, 注册自己的contributor, inspector, 在inspector里根据Attribute的属性去设置HttpContext.Current.Response.Cache, 就这样ok了...

[PageCache]
public class HomeController : SmartDispatcherController
{
    [PageCache(Duration
= 30, VaryByParam = "*")]
    
public virtual void Index()
    {
    }
}

http://files.cnblogs.com/Yok/MonoRailPageCache.rar
Tag标签: MonoRail

posted on 2007-01-23 09:33 Yok 阅读(2834) 评论(11)  编辑 收藏 网摘 所属分类: MonoRail专栏

评论

#1楼 2007-01-23 10:13 nono[未注册用户]

你在实际项目中就在应用monorail吗?我是从ror了解到rail框架的。前几天在vs2005上配置monorail没有成功,原因是WebApplicationProject无法安装成功,不知道是否可以指点一下如何安装。另外,请问使用monorail对提高开发效率有多大的好处?和ror一样吗?谢谢!   回复  引用    

#2楼[楼主] 2007-01-23 11:01 Yok      

vs2005原本取消了web application这种项目类型,只有web site,后来ms又后悔了,出了补丁,装完补丁后就可以使用了。不过据说只有英文版的vs才能打补丁:http://forum.castleproject.org/viewtopic.php?p=4999&sid=6d368d562053b48dbca6220c2adcae18">http://forum.castleproject.org/viewtopic.php?p=4999&sid=6d368d562053b48dbca6220c2adcae18
我现在在项目中就使用mr,项目里有两个成员对mr, castle ioc, nhibernate,xhtml,javascript都非常熟悉, 新同事也能比较快的上手。开发过程中基本没有遇到过比较大的技术问题。mr像ror那样简洁,又能使用大量的成熟的类库,缺点就是学习成本较高
  回复  引用  查看    

#3楼 2007-01-23 11:38 nono[未注册用户]

十分感谢!看来我只能用VS2003了。
还有个问题,能否推荐一下使用mr进行开发时,解决方案里一般都用了哪些项目?有哪些成熟类库可以使用吗?谢谢!
  回复  引用    

#4楼[楼主] 2007-01-23 12:46 Yok      

mr可以很好的和castle ioc, active record/nhibernate/ibatis等orm, 以及一系列facility结合使用。
不支持web application的vs05仍然能使用mr, 只不过项目和配置得手工搭起来
  回复  引用  查看    

#5楼 2007-01-23 13:39 Ariel Y.      

早就出了VS 2005 SP1,安装后可以支持Web Project Application.
去Microsoft Downloads上找找。
  回复  引用  查看    

#6楼 2007-01-23 21:42 ddee[未注册用户]

嗯,装了sp1后就行了,我就是这样的   回复  引用    

#7楼 2007-01-24 17:19 nono[未注册用户]

呵呵,我下载了,安装太慢了。
有没有monorail的中文网站?
  回复  引用    

#8楼 2007-09-11 13:25 xg117[未注册用户]

你的这种方法,根本就无法缓存.
我在我一个项目中试了,跟踪了一下,每次都还是要重新执行生成html
  回复  引用    

#9楼 2007-09-27 11:49 请教[未注册用户]

发布一个monorail网站,域名怎么映射到首页上呀!!!!

  回复  引用    

#10楼[楼主] 2007-09-27 23:20 Yok      

虚拟目录要设默认文档, 然后利用routing功能把默认文档地址rewrite到你的默认action. 你的默认文档必须存在, 哪怕只是一个空文件, 否则请求会直接返回404, 轮不到.net 的isapi接管   回复  引用  查看    




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 627269




相关文章:

相关链接:
<2007年1月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

公告

不玩了不玩了不玩了不玩了不玩了不玩了不玩了不玩了

与我联系

搜索

 

常用链接

留言簿

我参与的团队

我的标签

随笔分类

随笔档案

相册

Friend Links

积分与排名

最新评论

阅读排行榜

评论排行榜