全自动静态网页生成器之 缘起及html文件解析(红马天下)

转载 2006年05月22日 10:51:00
见过太多的大网站都已使用了静态网页。从性能上考虑,这当然是这类网站不二选择。虽然一直以来都很希望能够实现这个功能,但是毕竟没有很急切的需求,所以一直搁置下来。终于,现在的一个项目决定使用静态网页生成技术,我也狠下心来解决这个问题。
 
 曾经思考过很多种方案,但是一一否决了。一种方案是使用XML方案,从CSDN剽窃过来的思路,用XML文件保存数据,然后定义一个XSL,在客户端解析。这种方案最大的缺点是无法处理复杂的页面布局。设想一个很复杂的页面,你很难定义出合适的XSL,而且在客户端的开销也可能不被接受。另一种是使用JavaScript,将数据作为JS文件存储,但是并不是所有的客户端都支持JavaScript,而且我认为这种结构不好,也不容易管理。最后一种方式是使用模板。很多人在模板中定义特殊的字符串,然后一点点的进行替换,效率低,容易错,很难支持页面版面和内容的变更。

 综合思考了这些问题,我还是使用了定义模板的方式,但是和前面所说的模板方式不同。我期望能实现一些自定义的数据控件,使用在模板中。在生成静态页面的过程中,首先解析原始的模板文件,自动将控件识别出来,然后使用自定义的数据结构对这些数据控件进行自动绑定。很多高手一看就明白,这种方式和Asp.Net的方式有几分相似。其实我的灵感就来自它,当然以我的水平,达不到它的境界。采用这种方式,你可以在一定范围内自由改变设计而不需改变程序。即使对版式的改变很大,如果数据没有变动或变动很小,程序则不需变化或只需很小的变化。

 毕竟我经验尚浅,必有很多不合适的地方,希望大家能提出静态网页生成的更好思路,也欢迎大家批评指正。

 说了半天废话,现在言归正传,我们来考虑怎么实现这个想法。如上所述,我把整个过程分为两个步骤:先解析模板,然后数据绑定。现阶段,我只实现了模板解析。在这里先提出自定义数据控件的设计,我使用了html的格式:<flag name=value>body</flag>。 这样,我就可以使用和解析html语言一致的方式解析自定义控件了。

 在实际实现之前,我翻看了编译原理方面的书籍,大略看了一下其中的词法分析。这玩意真的挺复杂,没看懂。不过不管怎么样,还是有收获的,特别是那个有限自动机所谓的状态转换启发了我。先不考虑特殊的html语法,一般的html标签都是形如<flag name=value>body</flag>的格式。我定义了字符扫描的五种状态:空状态,正在查找控件,正在查找控件头部,正在查找控件内容,正在查找控件结尾。(注:在写这篇文章的时候,我觉得“正在查找控件”是多余的,但是暂且这样吧)这样几种状态的转换依赖我定义的五种边界字符:非边界字符,开始边界字符,结束边界字符,封闭边界字符,简短形式的结束边界字符。所有的这些都以枚举的形式定义在源码中。

 时间不早了,我要回家了,今天先写到这里。源码结构我觉得还是比较清晰的,注释也比较多,如果有人有兴趣详细研究它的实现方式的话,直接看源代码应该就可以了。如果还是不太明白或者我有时间的话,会接下去把思路完整的写下来。

BTW:现在基本完成了解析部分。结构已经完成了,但是很有很多Bug,调试很麻烦,希望有心人能够多多反馈。    

 晚安了,拜拜!

见过太多的大网站都已使用了静态网页。从性能上考虑,这当然是这类网站不二选择。虽然一直以来都很希望能够实现这个功能,但是毕竟没有很急切的需求,所以一直搁置下来。终于,现在的一个项目决定使用静态网页生成技术,我也狠下心来解决这个问题。
 
 曾经思考过很多种方案,但是一一否决了。一种方案是使用XML方案,从CSDN剽窃过来的思路,用XML文件保存数据,然后定义一个XSL,在客户端解析。这种方案最大的缺点是无法处理复杂的页面布局。设想一个很复杂的页面,你很难定义出合适的XSL,而且在客户端的开销也可能不被接受。另一种是使用JavaScript,将数据作为JS文件存储,但是并不是所有的客户端都支持JavaScript,而且我认为这种结构不好,也不容易管理。最后一种方式是使用模板。很多人在模板中定义特殊的字符串,然后一点点的进行替换,效率低,容易错,很难支持页面版面和内容的变更。

 综合思考了这些问题,我还是使用了定义模板的方式,但是和前面所说的模板方式不同。我期望能实现一些自定义的数据控件,使用在模板中。在生成静态页面的过程中,首先解析原始的模板文件,自动将控件识别出来,然后使用自定义的数据结构对这些数据控件进行自动绑定。很多高手一看就明白,这种方式和Asp.Net的方式有几分相似。其实我的灵感就来自它,当然以我的水平,达不到它的境界。采用这种方式,你可以在一定范围内自由改变设计而不需改变程序。即使对版式的改变很大,如果数据没有变动或变动很小,程序则不需变化或只需很小的变化。

 毕竟我经验尚浅,必有很多不合适的地方,希望大家能提出静态网页生成的更好思路,也欢迎大家批评指正。

 说了半天废话,现在言归正传,我们来考虑怎么实现这个想法。如上所述,我把整个过程分为两个步骤:先解析模板,然后数据绑定。现阶段,我只实现了模板解析。在这里先提出自定义数据控件的设计,我使用了html的格式:<flag name=value>body</flag>。 这样,我就可以使用和解析html语言一致的方式解析自定义控件了。

 在实际实现之前,我翻看了编译原理方面的书籍,大略看了一下其中的词法分析。这玩意真的挺复杂,没看懂。不过不管怎么样,还是有收获的,特别是那个有限自动机所谓的状态转换启发了我。先不考虑特殊的html语法,一般的html标签都是形如<flag name=value>body</flag>的格式。我定义了字符扫描的五种状态:空状态,正在查找控件,正在查找控件头部,正在查找控件内容,正在查找控件结尾。(注:在写这篇文章的时候,我觉得“正在查找控件”是多余的,但是暂且这样吧)这样几种状态的转换依赖我定义的五种边界字符:非边界字符,开始边界字符,结束边界字符,封闭边界字符,简短形式的结束边界字符。所有的这些都以枚举的形式定义在源码中。

 时间不早了,我要回家了,今天先写到这里。源码结构我觉得还是比较清晰的,注释也比较多,如果有人有兴趣详细研究它的实现方式的话,直接看源代码应该就可以了。如果还是不太明白或者我有时间的话,会接下去把思路完整的写下来。

BTW:现在基本完成了解析部分。结构已经完成了,但是很有很多Bug,调试很麻烦,希望有心人能够多多反馈。    

 晚安了,拜拜!

源码下载

静态网页和动态网页—HTML(htm)文件和aspx(asp)文件

l  定义     ²  静态网页     静态网页:对于动态网页而言,是指没有后台数据库、不含程序和不可交互的网页。你编的是什么它显示的就是什么、不会有任何改变。静态网页相对更新起来比较麻烦,适用于...

php动态网页实现页面静态化 通过在初次被访问时生成html文件保存起来,下次该PHP程序被访问时就直接找到以前被访问过的html页面

一、什么是静态页面?什么是动态页面 静态页面是网页的代码都在页面中,不需要执行asp,php,jsp,.net等程序生成客户端网页代码的网页。不能   静态页面 动态页面 ...
  • ITWYHH
  • ITWYHH
  • 2014年01月07日 13:22
  • 654

解析百度网页另存为html文件

  • 2017年10月20日 10:51
  • 10.02MB
  • 下载

html静态网页

  • 2012年04月22日 23:17
  • 4.9MB
  • 下载

将网页的解析数据存储为html文件

为了把从网页中解析的数据存储起来,便于存档和查询,可以把数据存放在数据库中,也可以以文件的方式存储,还可以存储为网络应用程序,即html文件或者CSV格式文件。本文引用一个例子,看看如何将网页的解析数...
  • abvedu
  • abvedu
  • 2017年02月05日 23:11
  • 261

生成html静态网页

  • 2007年04月24日 15:39
  • 3KB
  • 下载

静态网页模板html+css

  • 2017年12月05日 19:28
  • 14.65MB
  • 下载

在html静态网页中实现include包含功能

在html静态网页中实现include包含功能 对于全站网页制作有用,不用配iis就可以把整站的头部导航和尾部以一个外部文件的方式引入,就好像asp php中的include功能。原理是从网上找...
  • csnewdn
  • csnewdn
  • 2016年12月26日 17:52
  • 3645

html静态网页

  • 2014年12月11日 12:13
  • 9KB
  • 下载

静态网页设计和HTML语言

  • 2014年02月24日 22:15
  • 1.06MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:全自动静态网页生成器之 缘起及html文件解析(红马天下)
举报原因:
原因补充:

(最多只允许输入30个字)