把老赵的页面缓存片断改一下,呵呵

老赵同志写的页面缓存片断不错,用着方便,但我感觉在前端调用上有些不便,可以我把他的代码又改了一下,呵呵!

老赵代码的调用:

Before Rendering:
<%= DateTime.Now %>

<br />

Rendering:
<%= Html.Cache("Now", null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration,
    () => { System.Threading.Thread.Sleep(5000); return DateTime.Now; }) %>

<br />

After Rendering:
<%= DateTime.Now %>

占占页面片断缓存的调用:

@Html.Cache("test", DateTime.Now.AddMinutes(1),
 @<span>
     @DateTime.Now
 </span>
    );

前台UI层使用了razor视图引擎,写法上很简介,它与C#方法容为一体,我的HTML代码以参数的形式传递给了Cache方法,再看一下Cache方法原型:

    /// <summary>
    /// 缓存的扩展方法
    /// </summary>
    public static class CacheExtensions
    {
        /// <summary>
        /// 对页面中指定字符串进行缓存
        /// </summary>
        /// <param name="htmlHelper"></param>
        /// <param name="cacheKey">缓存Key</param>
        /// <param name="cacheDependencies">缓存依附对象,可以为null</param>
        /// <param name="absoluteExpiration">过期时间</param>
        /// <param name="slidingExpiration">相对本次过期时间</param>
        /// <param name="func">要缓存对象</param>
        /// <returns></returns>
        public static HelperResult Cache(this HtmlHelper htmlHelper, string cacheKey, CacheDependency cacheDependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, Func<object, HelperResult> func)
        {
            var cache = htmlHelper.ViewContext.HttpContext.Cache;
            var content = cache.Get(cacheKey) as string;

            if (content == null)
            {
                content = func.Invoke(null).ToHtmlString();
                cache.Insert(cacheKey, content, cacheDependencies, absoluteExpiration, slidingExpiration);
            }

            return new HelperResult(writer =>
            {
                writer.Write(content);
            });
        }

        /// <summary>
        /// 对页面中指定字符串进行缓存
        /// </summary>
        /// <param name="htmlHelper"></param>
        /// <param name="cacheKey">缓存Key</param>
        /// <param name="absoluteExpiration">过期时间</param>
        /// <param name="slidingExpiration">相对本次的过期时间</param>
        /// <param name="func">要缓存对象</param>
        /// <returns></returns>
        public static HelperResult Cache(this HtmlHelper htmlHelper, string cacheKey, DateTime absoluteExpiration, TimeSpan slidingExpiration, Func<object, HelperResult> func)
        {
            return Cache(htmlHelper, cacheKey, null, absoluteExpiration, slidingExpiration, func);
        }

        /// <summary>
        /// 对页面中指定字符串进行缓存
        /// </summary>
        /// <param name="htmlHelper"></param>
        /// <param name="cacheKey">缓存Key</param>
        /// <param name="absoluteExpiration">过期时间</param>
        /// <param name="func">要缓存对象</param>
        /// <returns></returns>
        public static HelperResult Cache(this HtmlHelper htmlHelper, string cacheKey, DateTime absoluteExpiration, Func<object, HelperResult> func)
        {
            return Cache(htmlHelper, cacheKey, null, absoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration, func);
        }
    }

呵呵,赶快去部署一下吧,有时,我们在考虑代码的功能性的同时,也应该多注意一下代码的调用的方便性与代码表现出现的艺术性!

感谢您的阅读!

感谢老赵同志!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:把老赵的页面缓存片断改一下,呵呵,如需转载请自行联系原博主。

时间: 2024-09-20 08:59:42

把老赵的页面缓存片断改一下,呵呵的相关文章

使用IE6看老赵的博客——比较完美版(可以在线查看、回复)

  上一个版本主要是测试一下我的想法,也是熟悉一下jQuery,代码这个东东不动手写一下是很难弄明白的.   有想法,写代码,出现错误,修改错误 = 不断进步.   带着问题去学习,动力就很大了.上一个版本能够看到了,但是还要修改URL,没看一篇都要改一下也太麻烦了.能不能点里面的连接,然后就直接看了呢?试了一下,很不幸又跳到那个郁闷的页面了.   怎么办呢?这就是问题.如何解决呢?修改连接,就是改一下a标签.点了之后不进行跳转不就行了吗?那我们还是来replace.   replace(/hr

使用IE6看老赵的博客——jQuery初探

  可能老赵很反感IE6,所以他在自己的博客里面做了点手脚,如果是IE6浏览他的博客的话,那么就会跳转到另一个页面.   很郁闷,看个博客吗,还要在安装一个浏览器?俺很懒,俺就是想要用IE6看!   最近在看jQuery,刚刚入一点门,发现了一个有趣的函数,就拿老赵的博客做实验了,哈.   装入一个 HTML 网页最新版本.  jQuery 代码: $.ajax({  url: "test.html",  cache: false,  success: function(html){ 

细谈Ehcache页面缓存的使用

/** *作者:张荣华 *日期:2007-9-30 **/ 关于缓存的话题,在坛子里已经有很多讨论,简单的来说,如果一个应用中80%的时间内都在访问20%的数据,那么,这时候就应该使用缓存了.这个和长尾理论正好相悖,其实也不是相悖,只是不同的理论使用的场景不同.在80/20原则生效的地方,我们都应该考虑是否可以使用缓存.但即使是这样,缓存也有不同的用法,举个例子,一个网站的首页估计是被访问的次数最多的,我们可以考虑给首页做一个页面缓存,而如果在某个页面上,比如说javaeye的java版区只有前

spring 和 Ehcache web做页面缓存配置出异常?

问题描述 项目用的是spring mvc + hibernate 的结构.现在想用 Ehcache web做一个简单的页面缓存.网上找了很多例子但是就是报异常:Caused by: net.sf.ehcache.CacheException: Error configuring from file:/D:/workspace/sulai/webapp/WEB-INF/classes/ehcache.xml. Initial cause was Error configuring from inp

使用OutputCache页面缓存,让GET方式缓存,doPostBack不读缓存。怎么办?

问题描述 使用OutputCache页面缓存,让GET方式缓存,doPostBack方式不读缓存,直接查询数据库.怎么办? 解决方案 解决方案二:怎么没人回呢?我表达的不清楚?解决方案三:关注下,同时帮顶...解决方案四:是OutputCache最基本的概念性的东西.参考:http://www.google.cn/search?aq=-1&oq=&complete=1&hl=zh-CN&newwindow=1&client=opera&rls=zh-cn&a

使用IE6看老赵的博客 jQuery初探_jquery

很郁闷,看个博客吗,还要在安装一个浏览器?俺很懒,俺就是想要用IE6看! 最近在看jQuery,刚刚入一点门,发现了一个有趣的函数,就拿老赵的博客做实验了,哈. 装入一个 HTML 网页最新版本. jQuery 代码: 复制代码 代码如下: $.ajax({ url: "test.html", cache: false, success: function(html){ $("#results").append(html); } }); <div id=&qu

蟠桃如何策划营销老赵家海参店

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 最近蟠桃开始策划营销一个新的网站--老赵家海参店,最近开始对海参比较感兴趣,毕竟现在的人开始越来越重视健康和养生了,而且有钱的人对于养生的重视程度相对更高,而且海参,只要开始吃了,觉得不错,都会认准一个牌子,并且这种高端的保健食品的消费需求也是很大的,所以做海参就是要培养用户的口味.当然今天在这,蟠桃不是要讲海参的,而是讲解策划营销老赵家海参

利用Spring MVC轻松实现页面缓存

缓存|页面 Spring的MVC是一个非常灵活的框架,可以无缝集成Struts/WebWork以及Velocity/Tapestry等View技术.Spring的DispatherServlet定义极为灵活,由于是开源框架,我们通过源代码,能轻松定制自己的处理流程. 为了实现页面缓存,可以改写DispatherServlet的doService()方法,这里提出一个解决方案: 利用WrappedResponse获得handler处理后的内容,然后缓存起来,这样在下次请求时,可以直接输出缓存内容.

禁止页面缓存的方法

缓存|页面 1, 在jsp或者servlet中加入 <%response.setHeader("Pragma","No-cache");response.setHeader("Cache-Control","no-cache");response.setDateHeader("Expires", 0);%> 2, 在页面中使用HTML标记,如下面: <HEAD><META ht