欢迎来到忆约科技! 手机版
编程专栏
网络探索
科技频道
社会话题
美文鉴赏

关于动态静态化页面(shtml)

编辑时间:2017年04月29日 14:44 作者:E小编

关于动态静态化页面(shtml)
    先谈一下本文会用到的三种网页格式,分别是HTML、SHTML、ASPX。它们各有特点:
HTML即为本文的主角:静态页面。如果浏览器从服务器上请求一个HTML页面,服务器把该页面原封不动地发送给浏览器。因此它的反应速度是最快的,而且对于cpu、内存等等的要求比较低。
  ASPX是目前比较流行的动态网页格式。ASP .NET页面的扩展名为 .aspx。如果浏览器请求的是一个ASP .NET页面,服务器在把它回送到浏览器之前会处理页面中的所有可执行代码。动态网页的一个特点是信息交互、及时更新、页面文件少、开发速度比较快。但是它的一个严重的问题是在访问量比较大,而服务器的配置和资源比较有限的情况下,一些频繁的读写数据库、程序逻辑等等,会使得服务器负担不起而当机。
  因此对于访问量比较大的网站,网页静态化是一个比较可靠的解决方案。但是静态页面重复的内容比较多,在信息量比较大的网站,全HTML可以说是无论对于开发者或者使用者,都是缺乏人性化的工作。例如我有一个显示内容的页面,它有左右两块,右边是文章内容,可能是长时间甚至永远不会变动的,左边是包含公告、新闻等的一些导航,更新速度比较快。那如果左边的公告有了新的内容,为了让每个页面的信息都准确,那所有的页面都要重新制作,这操作起来明显很不方便。于是就有了SHTML的存在。SHTML的一个特点就是在服务器会做一定的预处理,使得它可以用include file的方式,把若干个文件包含进来。例如上例的页面,可以拆分为a.html和b.html,然后用c.shtml把这两个文件包含进来,那在更新的时候只需要更新a.html,而b.html不需要更新,这样可以减少大量的制作工作。可能动态网页就是根据这个而产生的。在asp.net中,这是最基本的控件思想。以下是c.shtml的页面代码:
<div class=”contaier”>
<div id=”left”><!-- #include file=”a.html”--></div>
<div id=”right”><!-- #include file=”b.html”--></div>
</div>
因此,对于asp.net,可以采用输出shtml页面的方式,动态生成静态页面,来解决性能问题。如何动态生成静态页面,目前有两种主流的方式,一种是做一些静态页面模板,然后把内容填充替换,最后输出文件。一种是利用HtmlTextWriter重写AttributeCollection.Render。这两种方法都可以在网上搜到相关的文章。但是在这里我要引发更深入的问题:
1、 静态页面怎么更新?能不能自动更新?
2、 一些动态的元素,如登陆、搜索、访客,在静态页面中如何实现。
这里很可能就会用到ajax或者直接用Microsoft.XMLHTTP来做一些异步操作,最终可以解决上面的两个问题,但是以我的经验来说,总会觉得处理起来,特别别扭,特别艰难,很难保证能形成一种健壮的程序结构,以适应随时变化的客户需求。
因此,我们回归到asp.net,看aspx页面能不能给静态化一种解决方案,也就是我的目标:动态静态化。为此,先介绍作为这个思路的支持,需要用到asp.net的以下几个特点:
1、aspx支持类似shtml的的语法,如果一个aspx页面没有带代码,那它跟shtml和html的静态页面的速度和效果是基本一致的。
2、aspx支持前置代码,即完全不要aspx.cs的后置代码,只要在顶部把声明后置代码的那一段去掉,即<%@ Page Language="C#"%>用来声明文件。然后直接把代码写在页面:
<script runat="server">
 protected void Page_Load(object sender, EventArgs e)
 {
    if(!IsPostBack)
    {
     this.funcInit();
    }
 }
</script>
这样代码就会执行,即不需要预先编译,动态编译。
3、 aspx支持以ascx命名的各种用户控件。
  有了以上三点的支持,我们就可以实现动态静态化。首先。按动态网站的开发方式,开发出一个网站。网站中的所有页面的内容都是由ascx的控件组成,.aspx中只有简单的html框架和用户控件引用。做一个页面或者一个winform工具实现以下静态发布功能:
1、 录入ascx控件信息,包括引用路径、参数等等。
2、 点击生成,则会自动将上面录入的控件信息,写入一个跟它同名的aspx页面上。访问这个动态生成的aspx页面,可以得到他生成的文本内容。
3、 根据获得的文本内容,在指定目录下生成.html或者.txt文件。
4、 自动或手动(页面比较复杂的用手动)把aspx页面中的这个ascx控件,改成的引用方式。
最后看一下结果:在开发环境下,依然是动态页面,一点都没有改变。这对于后期维护修改有很大的帮助。由于增加了一个静态发布的过程,在发布环境下,同是index.aspx的页面,会被全部或者部分改成包含文件的shtml的模式。然后由于是aspx页面,所以某些不需要静态化的控件功能可以继续正常使用。而所需要做的工作就是在前期录入那些页面控件的相关信息,以后修改完,就直接按发布就完成。以上就解决了aspx中的静态化问题。
二维码