本文主要讲述了在asp.net mvc中,页面静态化的几种思路和方法。对于网站来说,生成纯html静态页面除了有利于seo外,还可以减轻网站的负载能力和提高网站性能。在asp.net mvc中,视图的Razor引擎和控制器为我们静态化提供了新的思路和方法,我们可以利用视图引擎和重写过滤器进行静态操作。

 

先说下本人目前已知的静态化思路,大概有4种方法:

一、使用html模板搭配自定义占位符标识

这是最常见的方法,这种方法需要先编写一个html模板页,模板中定义好需要替换的占位符标识,在需要生成HTML页面的时候,将自定义的占位符标识替换成要展现的内容。比如模板html页面中,有个@template_placeholder_articlecontent标识(表示文章的内容),我们就可以使用string.Replace方法将标识替换成所需的文章内容,或者使用正则表达式进行替换。

最后将生成的静态网页内容通过IO保存为html页面,具体的实现步骤可以看下这篇文章:ASP.NET MVC使用HTML模板进行静态化操作

二、使用ASP.NET MVC的视图引擎生成静态HTML页面

这种方式是我比较推荐的方法,因为可以使用视图文件作为静态模板,还可搭配布局页来使用,这样动态界面和静态界面都是同一套模板,减少了额外编写静态模板的时间!并且在静态化时,填充数据也十分简单,依旧是使用模型数据!

大概说下思路,首先使用ViewEngines类找到要静态化的View视图,然后通过ViewContext类将数据模型填充到视图中,再使用ViewContext.View.Render(ViewContext viewContext, TextWriter writer)方法将获取视图页面的输出流,最后通过File.WriteAllText(string path, string contents)方法将页面内容写入到磁盘中。

我另外写了一篇文章来详细的说明:ASP.NET MVC 使用视图引擎实现页面静态化。毕竟这种方式需要涉及到多个MVC特性的使用,文章中会分享一个已经写好的帮助类,可以很容易的进行调用和操作。

PS:外国猿类同胞的思路:Rendering ASP.NET MVC Views to String

三、ASP.NET MVC中通过重写操作和结果过滤器实现静态化

我们可以通过重写过滤器来实现一个自定义的静态操作过滤器。通过继承IResultFilter接口,利用HttpResponse.Filter将页面内容输出到流中,最后通过IO操作生成静态页面。

可以查阅这篇文章:利用ResultFilter实现asp.net mvc3 页面静态化

另外利用Response.Filter属性本身也是一种生成静态页的方法,网上也是有很多相关资料。

四、直接在后台编写和生成HTML页面的代码

本人十分不推荐使用这种方法,这种方法是直接在服务端用字符串拼接html代码,最后保存为.html后缀的静态网页。通过拼接字符串,对于维护、优化、代码查看来说,都是非常不友好的,有可能会坑了以后维护代码的兄弟。毕竟一大堆的StringBuilder.Append方法是和很不雅观的,而且也十分不灵活,需要使用大量的转义符号!

五、使用XML+XSL生成HTML

这里我建议看这篇文章:使用XML及XSL生成简单HTML

这种方式主要是将数据保存成XML,通过与XSL模板进行转换后(相当于数据填充到模板中),形成纯HTML页面字符串,最后进行IO操作保存并生成静态页面,这也算是另外一种方式的静态化。

另外听说可以使用自定义基架模板,比如MVC中默认的T4模板(Text Template Transformation Toolkit),具体我也不太了解,有兴趣的朋友可以看下。

这里额外的说下生成静态页面的时机,一般是根据业务需求来决定,有条件也可以编写一个服务程序,在服务器上自动定时生成纯静态的HTML页面。当然也可以在进行添加、删除、修改页面等操作后再进行静态化处理。


ASP.NET MVC 页面静态化操作的思路的更多相关文章

  1. Asp.Net MVC页面静态化功能实现一:利用IHttpModule,摒弃ResultFilter

    上一篇有提到利用IHttpModule和ResultFilter实现页面静态化功能.后来经过一些改动,将ResultFilter中要实现的功能全部转移到IHttpModule中来实现 Asp.Net ...

  2. Asp.Net MVC页面静态化功能实现一:利用IHttpModule和ResultFilter

    由于公司现在所采用的是一套CMS内容管理系统的框架,所以最近项目中有一个需求提到要求实现页面静态化的功能.在网上查询了一些资料和文献,最后采用的是小尾鱼的池塘提供的 利用ResultFilter实现a ...

  3. Asp.Net MVC页面静态化功能实现二:用递归算法来实现

    上一篇提到采用IHttpModule来实现当用户访问网站的时候,通过重新定义Response.Filter来实现将返回给客户端的html代码保存,以便用户下一次访问是直接访问静态页面. Asp.Net ...

  4. 利用ResultFilter实现asp.net mvc 页面静态化

    为了提高网站性能.和网站的负载能力,页面静态化是一种有效的方式,这里对于asp.net mvc3 构架下的网站,提供一种个人认为比较好的静态话方式. 实现原理是通过mvc提供的过滤器扩展点实现页面内容 ...

  5. Asp.net Mvc 页面静态化

    http://www.cnblogs.com/gowhy/archive/2013/01/01/2841472.html

  6. Asp.net动态页面静态化之初始NVelocity模板引擎

    Asp.net动态页面静态化之初始NVelocity模板引擎 静态页面是网页的代码都在页面中,不须要运行asp,php,jsp,.net等程序生成client网页代码的网页,静态页面网址中一般不含&q ...

  7. MVC页面静态化

    MVC 页面静态化   最近工作需要,实现页面静态化,以前在ASP时代,都是FSO自己手动生成的. 新时代,MVC了,当然也要新技术,网上一搜,找到一种解决方案,是基于MVC3的,实现原理是通过mvc ...

  8. MVC 页面静态化

    最近工作需要,实现页面静态化,以前在ASP时代,都是FSO自己手动生成的. 新时代,MVC了,当然也要新技术,网上一搜,找到一种解决方案,是基于MVC3的,实现原理是通过mvc提供的过滤器扩展点实现页 ...

  9. 利用ResultFilter实现asp.net mvc3 页面静态化

    为了提高网站性能.和网站的负载能力,页面静态化是一种有效的方式,这里对于asp.net mvc3 构架下的网站,提供一种个人认为比较好的静态话方式. 实现原理是通过mvc提供的过滤器扩展点实现页面内容 ...

随机推荐

  1. Android Studio 点运行启用时,列表中不显示虚拟机,但是实际上在AVD Manager中已经添加了2个虚拟设备了

    Android Studio 点运行启用时,列表中不显示虚拟机,但是实际上在AVD Manager中已经添加了2个虚拟设备了 百度上找了一下方法, 情况出现:打开androidstudio,一直连接不 ...

  2. jemalloc内存分配原理【转】

    原文:http://www.cnblogs.com/gaoxing/p/4253833.html 内存分配是面向虚拟内存的而言的,以页为单位进行管理的,页的大小一般为4kb,当在堆里创建一个对象时(小 ...

  3. 一口气讲完 LSA — PlSA —LDA在自然语言处理中的使用

    自然语言处理之LSA LSA(Latent Semantic Analysis), 潜在语义分析.试图利用文档中隐藏的潜在的概念来进行文档分析与检索,能够达到比直接的关键词匹配获得更好的效果. LSA ...

  4. Canal - 数据同步 - 阿里巴巴 MySQL binlog 增量订阅&消费组件

    背景 早期,阿里巴巴 B2B 公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求 ,主要是基于trigger的方式获取增量变更.从 2010 年开始,公司开始逐步尝试数据库日志解析,获取增量变 ...

  5. 面试突击(五)——Java常用集合

    为了勾起回忆,我画了一个常用集合类的结构关系图,话不多说,详见下图: 实际开发中ArrayList/HashMap/HashSet是三种最常用的集合工具类,通过其结构关系图也能清晰的了解他们的特性,所 ...

  6. Mac下 VirtualBox(VBox) 的 Centos6/7 共享文件夹配置

    vbox 安装虚拟机请移步这里. https://blog.csdn.net/a47846800/article/details/88847466 前期准备: 远程登录 centos 系统, 分边执行 ...

  7. 搭建Portainer可视化界面(转)

    转载地址:https://blog.csdn.net/u011781521/article/details/80469804 一.什么是Portainer? Portainer是Docker的图形化管 ...

  8. 【SpringBoot】SpringBoot与SpringMVC自动配置(五)

    本文介绍SpringBoot对Spring MVC自动配置,SpringBoot自动配置原理可以参考:[SpringBoot]SpringBoot配置与单元测试(二) 首先新建一个SpringBoot ...

  9. 【SpringBoot】SpringBoot日志框架(四)

    日志框架介绍 在开发过程中,我们经常使用到日志来进行排查问题,我们使用的日志框架都是由2部分组成(日志API + 日志实现) 日志API(及日志抽象层)有:SLF4j(Simple Logging F ...

  10. Docker使用 - 容器

    查看容器 命令:docker  ps  [options] options有: -a:查看所有容器,包含不在运行中的(不带-a参数,是只显示运行中的容器) -q:只显示容器ID -s:多加一列来显示总 ...