MVC-实现页面缓存or静态化

页面缓存存放在了Dictionary中,可以自己替换

助手类:

public class StaticHelper
    {
        /// <summary>
        /// 将页面渲染成html字符串
        /// </summary>
        /// <param name="context">传入this.ControllerContext</param>
        /// <param name="viewPath">静态页面的模板路径</param>
        /// <param name="model">往模板中传入实体,进行赋值</param>
        /// <returns></returns>
        public static string RenderViewToString(ControllerContext context, string viewPath, object model = null)
        {
            ViewEngineResult viewEngineResult = ViewEngines.Engines.FindView(context, viewPath, null);
            if (viewEngineResult == null)
            {
                throw new FileNotFoundException("View" + viewPath + "cannot be found.");
            }
            var view = viewEngineResult.View;
            context.Controller.ViewData.Model = model;
            using (var sw = new StringWriter())
            {
                var ctx = new ViewContext(context, view, context.Controller.ViewData, context.Controller.TempData, sw);
                view.Render(ctx, sw);
                return sw.ToString();
            }
        }
    }

ActionFilter:

public class StaticFilterAttribute : ActionFilterAttribute//, IResultFilter
    {
        static Dictionary<string, string> DICT = new Dictionary<string, string>();

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var url = filterContext.HttpContext.Request.RawUrl;
            var key = url.GetHashCode().ToString();
            if (DICT.TryGetValue(key, out string html))
            {
                var content = new ContentResult();
                content.Content = html;
                filterContext.Result = content;
            }
            base.OnActionExecuting(filterContext);
        }
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            var url = filterContext.HttpContext.Request.RawUrl;
            var key = url.GetHashCode().ToString();

            Person p = new Person
            {
                ID = 1,
                Name = "haha",
                Birthday=DateTime.Now
            };
            var html = StaticHelper.RenderViewToString(filterContext.Controller.ControllerContext, "~/Views/StaticPage/Index.cshtml", p);
            DICT.Add(key, html);
            base.OnActionExecuted(filterContext);
        }
    }

未完待续...

原文地址:https://www.cnblogs.com/fanfan-90/p/12155655.html

时间: 2024-10-04 03:06:59

MVC-实现页面缓存or静态化的相关文章

电商软件shop++ 的网页缓存、静态化

随着网站规模的变大,访问量提升,网站服务器越来越不堪重负,浏览者也会对页面打开的速度怨声载道.这时候最简单的解决方案就是增加缓存.网站服务器的缓存有很多中,可以放在数据库和Web应用程序之间,也可以放在Web应用程序和Web服务器之间,还可以放在Web服务器和用户浏览器之间,甚至可以直接放在浏览器端.其中最简单,需要配置最少的莫过于数据库和Web应用程序之间了,并且见效也最快,因为对于现代计算机系统来说IO是最大的瓶颈.常见的方法就是使用MemCache或者K-V型NoSQL数据库做缓存.这么安

页面缓存-freemarker静态处理

1.动态网页和静态网页的差异 动态网页是指静态网页相对的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和和效果就不会再发生变化(除非修改页面代码).而动态网页则不然,页面代码虽然没有发生改变,但是显示的内容却是可以随着世界.环境或者数据库操作的结果而发生相应的变化.简而言之,动态网页是基本的HTML语法规范与java.vb.vc等高级程序设计语言.数据库编程等多种技术的融合.以实现对网站内容和风格的高效.动态和交互式的管理. 1)静态网页 a.静态网页的内容稳定,页面加载速度快.

Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化

模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则.强大的功能.高效的渲染效率.详尽的帮助说明与不断的更新与维护.常见的前端模板引擎有: 常用的java后台模板引擎:jsp.FreeMarker.Velocity等. 请不要迷恋速度,为了推广的测试可能是片面的,好的模板引擎经得起时间考验,建议大家选择成熟的.常用的模板引擎.另外不管前后端的模板引擎

一个做页面静态化的php类

<?phpnamespace Common;/* * * 功能:页面静态化的创建和删除 * 创建:当且仅当,一个页面需要被静态化并且还未静态化时. * 删除:当且仅当,一个页面存在静态化页面并且需要被重新静态化时. * * 作者:郭军周 * * 注 :本类基于ThinkPHP3.2,或者其他具有"单一入口且MVC模式"的其他php框架. * * 使用方式:在Controller的构造方法中获取其对象:在Controller的销毁方法里,用其对象的_static方法. * 例:XX

浅谈——页面静态化

现在互联网发展越来越迅速,对网站的性能要求越来越高,也就是如何应对高并发量.像12306需要应付上亿人同时来抢票,淘宝双十一--所以,如何提高网站的性能,是做网站都需要考虑的. 首先网站性能优化的方面有很多:1,使用缓存,最传统的一级二级缓存:2,将服务和数据库分开,使用不同的服务器,分工更加明确,效率更加高:3,分布式,提供多台服务器,利用反向代理服务器nginx进行反向代理,将请求分散开来:4,数据库的读写分离,不同的数据库,将读操作和写操作分开,并实时同步即可:5,分布式缓存,使用memc

[转]PHP实现页面静态化的超简单方法

为什么要页面静态化? 1.动态文件执行过程:语法分析-编译-运行 2.静态文件,不需要编译,减少了服务器脚本运行的时间,降低了服务器的响应时间,直接运行,响应速度快:如果页面中一些内容不经常改动,动态页面静态化是非常有效的加速方法.(纯静态,伪静态还是需要PHP解释器的) 3.生成静态URL利于SEO,利于蜘蛛抓取和收录,有利于提升排名 优化页面响应时间方法 1.动态页面静态化 2.优化数据库 3.负载均衡 4.使用缓存等等 //动态页面静态化一般用于不经常改动的地方,频繁改动的地方一般不适用静

ASP.NET页面静态化 之 (伪静态)

1.页面为何要静态化 有利于搜索引擎优化(SEO) 使页面URL看起来更正规 真静态 的效率更高,并且更安全,HTML页面不会受Asp.Net相关漏洞的影响: 2.伪静态原理 其原理就是,在一个页面请求的执行期间将伪静态的URL重写成真实的URL路径: 3.那种条件下需要静态化 一个页面经常被访问,并且页面内容基本不变的: 所有用户访问的页面内容基本一样的. 例如:(新闻模块) 4.下面开始带领大家写一个伪静态的案例(新闻模块) (1)先创建新闻模块数据库 T_Channels表,存储新闻类别

PHP页面静态化(转)

在很多地方都看到有PHP整站静态化的东东,怪唬人的..其实,你会静态化一个页面,那么别说整站了,想静态化多少都可以.所以关键是,首先要知道怎么静态化一个页面,了解静态化的原理是关键.. 这里就说下我个人的理解了. 首先,需要知道几个函数. ob_start(); ob_end_clean(); ob_get_contents(); file_put_contents();//这个可以用fopen,fwrite代替 file_exists();等函数. 不知道这些函数的就自己去翻手册,这里就不多讲

Spring MVC + freemarker实现半自动静态化

这里对freemarker的代码进行了修改,效果:1,请求.do的URL时直接生成对应的.htm文件,并将请求转发到该htm文件2,自由控制某个页面是否需要静态化原理:对org.springframework.web.servlet.view.freemarker.FreeMarkerView类进行扩展第一步:在web.xml中将*.do请求交给SpringMVC XML code <servlet> <servlet-name>demo</servlet-name>