静态页面生成的思考

  现在的网站管理系统都喜欢采用生成静态网页的方式,以减轻服务器端处理过多动态解析的负担;实际上在asp.net、JSP这类编译执行的系统中,这个负担已经被大大减轻,生成静态文件同样是一大负担。当然,生成文件的慢是管理员体验,而首次访问慢是用户体验,从这个角度来说,服务器端生成静态文件还是有必要的。

  但是我们不得不考虑到目前流行的html静态页生成的后遗症——后期维护,实际上这也正式目前我们团队在工作中已经遇到的大问题。

  我们的网站每天更新量大约在2000条信息左右,目前仅新闻频道就已经有几十万条信息,我们每天同时有十多名甚至二十多名编辑同时在线更新。目前我们的网站目录已经有近10G大小,每次把网站文件打包需要三个多小时(不包括数据库,数据库是SQL Server)。因此编辑工作繁忙的时段,上传、生成等工作集中在一起,后台速度严重降低。

  除此之外,每当我们需要对网站的栏目、页眉、页脚等方面进行一次改动,就不得不重新生成静态文件(现在我们采用生成shtml文件,服务器端包含页眉页脚的方式,已经基本解决这个问题),或者我们的网页模板进行了改动,必须重新生成静态文件。

  这一切造成网站的规模越大,后期维护难度越大,成本越高。

  针对这一切,我想到静态生成的另一种方式,当然,会增加模板制作的难度,但是同时却有更多的好处,那就是进一步分离网站的内容和结构。

  我们知道生成静态文件最大的目的是减少数据库查询。生成静态页只需要一次请求就得到页面内容。那如果我们生成静态xml内容呢?这样一次生成之后,内容页以后基本不用再次生成(这相当于以前用文本数据存储的形式,但是文本数据存储是服务器端脚本通过I/O方式读取文档,而xml静态内容是客户端直接请求xml,完全无需服务器端做任何解析或者运算)。

  有人说,生成xml了那怎么实现多姿多彩的网页效果啊?我们知道xslt可以把xml格式化成html,而且这种格式化可以在服务器端完成也可以在客户端完成。因此我们完全可以输出的就是指定了xslt的xml文件。内容很少,不需改动,就算改动了,也只需要重新生成当前的xml文件,磁盘读写内容大大减小。

  基本的实现思路和带来的好处如下:

  1. 服务器端生成静态的xml,xslt相当于页面模板,是固定的,css文档是外部的。xml负责内容,xslt负责结构,css负责表现。
  2. 如果一个网站需要改变风格,比如颜色、背景和简单的布局变化,只需要写css就可以实现;如果更进一步,需要改变页面结构,只需要修改xslt(千万文章也只是一个或几个xslt)。立即更改立即生效。
  3. 不用在每次改版的时候重新生成任何的静态文件;并且,我们可以把公共信息单独输出xml,不和内容页混合在一起,要知道,一个xslt并不是只能单独处理一个xml.如此以来,当我们改变了导航结构等公共信息,依然只需要重新生成一个文件,就像更新了一下缓存。
  4. 用户访问的时候,每次只下载内容部分,不需要重新下载xslt和css,等于不用ajax却实现了局部更新。

  这个思路并不是首创,我上网查找相关资料的时候发现有不少同类思路。动易系统在ASP版本中也实现过栏目导航的xml输出,不过只是为了让flash等非asp的应用便于读取栏目结构罢了。另外还有人成功实现了生成静态xml,采用Ajax方式在客户端实现页面内容的变换。

  可见这并不是一个不可行的思路,当然具体实现起来需要解决很多问题,而且它也有它的缺点:

  网页制作从静态html模板+标签变成了css文件和静态html(页面设计师实现)+xslt模板(UI工程师或者程序员实现)+xml标签数据和内容数据(应用开发商实现);

  但是这个困难只针对一个环节,就是建站环节,而事实上如果官方提供的xslt能够输出结构优秀的html结构,那么设计师其实不需要修改xslt对最终html文档结构做大的变动就可以对网站样式进行彻底地改变。

  而且这样以来,程序员的web标准知识欠缺或者不了解xhtml,不能输出优秀的符合大家需要的html也不会影响到高水平站长对web标准的追求。

  我坚信如果这个方案能够得到完善并实施,对于网站管理者来说,绝对是利大于弊。

               

静态页面生成的思考》上有4条评论

  1. cutefool

    lz,网站上的静态页面都放在一台服务器上吗?有没有更好的解决方案?

    1. 小李刀刀 文章作者

      一台服务器专门提供动态内容服务,一台服务器专门提供静态内容服务(远程发布)模式当然是更好的。甚至图片附件、视频等都各自由专门的一台服务器提供会更好。

      不过对于大部分的网站来说,内容量和负载量都没有达到这么大的需求罢了。另外市场上的开源WEB程序大部分也没有提供服务器集群方式的管理。

  2. thisisnet

    这个xml+xslt的方式我已经实现过了。不过考虑了很久,觉得仍然缺陷很大。
    1、客户端浏览器解析速度的问题。感觉IE解析xml的时候会“卡”,ff没有测试。(赛扬2.66+2G内存+windows2003)
    2、搜索引擎友好的问题。如果采用了xml的方式。如何对古狗和百度优化?搜索引擎好像对xml+xslt的方式不感兴趣。

    1. admin

      第一个问题应该不存在。

      第二个问题,可以采用URL重写。

评论已关闭。