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


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

    老赵代码的调用:

    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);
            }
        }

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

    感谢您的阅读!

    感谢老赵同志!

  • 相关阅读:
    linux 中rz sz 文件传输
    linux find 命令
    深度学习的博客
    cifar10数据的转换、代码解释
    gflags的使用实例(转载)
    leveldb使用 (转载)
    (转载+整理)Leveldb安装及例子
    2013-09-25-【随笔】-Roy
    2013-09-22 [随笔]-Roy
    2013-08-12【随笔2】-Roy
  • 原文地址:https://www.cnblogs.com/lori/p/2874637.html
Copyright © 2020-2023  润新知