My favorites | Sign in
Project Logo
             
Search
for
Updated May 31, 2009 by jindwcn
Labels: Template, JSI, Deprecated
Template  

JSISIDE的模板框架

模板引擎这种用来处理大量文本数据的工具,一直在服务端得到比较广泛的使用,但是,在前端,确一直少有听闻,我想,性能算是一大问题吧,JSISIDE将采用一种类似jvm,将源文件编译成中间格式的方式(JSON),大大提高模板引擎的效率,同时允许调试期间即时编译。不造成调试期间的麻烦。

JSISIDE模板框架是一个微指令集及其编译处理支持,还有基于该统一指令集的模板系列,他可以支持不同类型的模板语言,这些不同的语法,都可以解析转换成一种统一的中间数据,模板指令集,然后,通过统一的编译过程,将这些模板数据转换成可渲染的模板函数。

数据存在形式

模板原文件--->模板指令集-->模板对象 模板源文件,可以是一个CTVelocity类似语法的文本模板,也可以是一个jelly类似的XML模板,也可以是一个smarty类似的模板。这些模板源文件通过解析后(调试时,这一步可以运行期完成;系统正式发布后,这一步可以在编译期完成),被转换成模板指令集;这个指令集再通过简单的遍历,转换成可以执行的渲染函数。

模板解析过程

基本的思路是,先把模板的静态数据和动态指令编译成一个一维数组。其中指令以简单对象的方式存在,我们可以使用json标准去系列化这种中间代码。

模板编译过程

模板运行前,通过一个类似敲木桩的过程,吧这种一维数组转换成有效的模板函数。

微指令集合

type object comment
el 0,expression,unescape //表达式
attribute 1,name,expression //动态XML属性
if 2,expression //条件块
else if 3,expression //条件块
else 4 //条件块
for 5,var,itemExpression,status //循环处理
var 6,name,expression //设置某个变量
end: //结束标签(如for if else 等是必须要结束标签的)

一些无需指令的常用语法元素(在编译期间被处理掉,直接将目标代码编译成更加低级的微指令集)

type object comment
include {url:..,xpath:..,name:..} 包含某个页面,或者页面片段(xpath),或者一个命名节点
template {url:...,name:...} 将自己挂起,替换为模板页面,而模板页面中,可以引用自己这个节点,有点类似sitemash的功能(转义使用el)

成功案例

JSI 文档解析工具: http://www.xidea.org/project/jsidoc


Comment by jindwcn, Feb 10, 2009

该模版引擎已前一至Lite:

http://lite.googlecode.com


Sign in to add a comment
Hosted by Google Code