我的CMS开发记5 实现静态化页

      为了实现静态化页,我在博客园里可是搜了半天。最后找到两个方案:

  1.  http://www.cnblogs.com/hsqzzzl/archive/2005/10/23/260122.html文中的,生成静态页后,使用url重写重定向到静态页上。
  2. http://www.cnblogs.com/nurong/archive/2005/10/15/255439.html 使用404方式动态地生成静态页。

那么这两种那个好呢?嘿嘿,本人的办法是,两种都实现,然后自己选择。是啊,不试一试怎么知道哪种效率更好。

实现方面没啥多说的,基本和两位的办法差不多。但是在生成静态页时,我用的既不是filter的办法,也不是webclient的那种采集式的方法。因为我的系统比较特殊,是DNN式的单页面系统。所以,最佳的实现方法,是孟子E章的重写Render方法的办法。原来很简单,先将Render执行的结果保存在字符串里,然后保存到文件里,最后在Response.write。

Code

代码很简单,我就不多废话了。

根据我的测试,404方式的静态化页,并没有出现先返回404再出现正确页面的情况。我用httpwatch 跟踪下来,http的头返回是这样的:如果html页不存在,那么返回302错误,然后转向到自定义404页。自定义404页根据参数判断请求的页面,如果合法,那么马上生成这个页面,这时候要注意,不能直接server.transfer到静态页。否则浏览器的url会错误。必须待生成完毕后 ,先返回一个(no-cahce)的标记    然后 response.redirect到静态页去。如果不指定no-cahce将会导致浏览器呈现一个空白页。如果请求非法,那么404页面就输出404标头。

   因此,404法静态化确实可行,而且不会出现错误地返回404的情况,大可以放心使用。主要代码:

Code

 

至于动态页,url重定向静态页,和404法静态页的效率,我这里也试了一下:在本地机器上,用httpwatch观察,在我充分地利用了缓存等的前提下,动态首页大约响应时间是0.010秒,而url法和404法两者的响应时间 均为0.001秒。httpwatch提示<0.001。

但是在虚拟主机上,情况就大不相同了,我使用的是最便宜的空间,经过尝试,404法的速度要远高于url法。因为404法的静态页根本不经过asp.net,iis直接就处理了,而url法需要经过asp.net,由于虚拟主机的关系,始终是要慢了一点。

     维护方便性上,url法要优于404法,url法配置方便,并且更新也方便,可以将需要更新的页面的url存在内存里,每次rewrite的时候就可以判断了。而404法则比较麻烦,如果要更新页面,则必须要设法删除原来的静态页面,404页面才能再次生效。而且在配置时需要虚拟主机配置404页,否则根本无法使用。

     最后要感谢两位前辈趟出来的路,才能实现得比较顺利。




原文地址:https://www.cnblogs.com/ashei/p/1377260.html