见过太多的大网站都已使用了静态网页。从性能上考虑,这当然是这类网站不二选择。虽然一直以来都很希望能够实现这个功能,但是毕竟没有很急切的需求,所以一直搁置下来。终于,现在的一个项目决定使用静态网页生成技术,我也狠下心来解决这个问题。
曾经思考过很多种方案,但是一一否决了。一种方案是使用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,调试很麻烦,希望有心人能够多多反馈。
晚安了,拜拜!
源码下载
分享到:
相关推荐
通达信指标公式源码 红马抓涨停防开板副图选股指标 源码 通达信.doc
教育精品资料
《红马的故事》 (2).ppt
1红马的故事——学习ppt课件
红马版验证码实现(中文+变形+噪点)asp.net+C# 红马版验证码实现(中文+变形+噪点)asp.net+C#
scratch编辑、湘少版、六年级上、英语单词、记忆。可设定单词数量、起实位置、复习错题、显示单词表、显示错误单词、删除错误单词表。
我是参考红马天下的文章 当初我把红马的文章看完后,自己做了还是无法显示,最后用了这个例子,就OK了 注:网页记得设置对其地址信任 好多朋友都来加我,我就整理了一下,发到CSDN,提供下载。没分了,就赚1分。...
三年级语文上册 红马的故事 1教案 鄂教版 教案.doc
软件功能强大,支持消息群发、全自动操作等功能。软件界面美观简洁、简单全面、实用方便,可快速上手,轻轻松松完成日常IS语音营销推广功能,真正做到简单全面实用。是用户实现IS语音营销推广功能的好帮手。 IS自动...
魔维YY频道管理系统,是一款YY公会全自动管理的软件,方便实用,简单可靠! 魔维YY频道管理系统 功能简介 1、软件界面一目了然/歉容Win7及以上系统/外表简洁/操作速度快/占用内存小/使用舒畅 2、获取成员:橙马/...
2红马的故事——学生学习课件
小学教案
三年级语文上册第二单元红马的故事课件4鄂教版
三年级语文上册第二单元红马的故事课件2鄂教版
三年级语文上册第二单元红马的故事课件5鄂教版
三年级语文上册第二单元5红马的故事分层练习鄂教版
小学教案
ZhyQT自动发广播软件是一款自动发广播软件,乃主持、管理、红马广播必备利器,软件工作时完全不影响您的其他操作,你可以照样、拍单、放单、聊天、看电影,软件完全后台操作。 ZhyQT自动发广播软件使用说明: 一:...
三年级语文上册第二单元5红马的故事第2课时练习鄂教版