cms模板,Doodle.CMS模板引擎开篇

之前一直都瞎扯淡。也没撒谈论技术,一堆大牛在此之后,也不敢卖弄了。之后几篇就来写点实在的技术吧。
在Doodle.CMS系统中为了避开页面的修改伴随而来的代码修改。所以就需要一个好的模版引擎。模版引擎实在太多,最常见的NVelocity,Ruby中的DotLiquid,Lite 还有什么SharpTemplate等一堆堆的。作为一个开源的Fans看着这些开源的模版引擎都绝望。很多实在不好用。
aspx页面的确有模板的功能,不过语法太狗血了。不喜欢使用者飘过。
然后就是NVelocity,NVelocity很好很快很强大,速度几乎和直接Replace差不多。唯一不好的时候就是页面没彻底的模版化。作为一个CMS总不能够说因为页面增加了一块数据就要去改代码吧。所以最后必须要让模版去控制最后一套完整的显示,尽管NVelocity支持直接调用实例化之后的方法可以来调用数据库,但是这样的语法设计的就是太折腾人了,同时也产生了一个问题,大量的方法反射造成对象的引用不正常,所以GC也不能够正常的运行,于是拿过去用ab模拟一下页面预览的场景,内存迅速的飙升,悲催啊,160M,一套系统才50M不到的内存,杯具,同时NVelocity发生过两个页面key相同数据不一样时候数据竟然显示一样,推测线程不安全,于是果断放弃。
于是总结了一些需要 1:模版必须很快,同时内存控制的必须很好。内存必须在即使ab -m 1024的情况下内存在60M之内。(也就是同时有1024个人访问内存控制在单方法控制在60M之内。并且响应0.5秒之内) 2: 支持完整的逻辑表达式,for foreach if elseif else break while do case ++ 等语句。 3: 必须彻底的开发者和使用者之间的关系。开发者开发完成了之后,使用者通过模版语句来控制显示什么的问题。比如直接的数据库使用的支持。多数据库的支持,站外数据的支持。 4: 支持页面的缓存和部分数据的缓存。这样来减少页面的运行效率。 5:语句要简单易懂,并且有很好的扩展性和逻辑性。 6:直接的被使用,减少使用的侵入性。 7:不和一些存在的框架冲突,特别是jquery。 8: 当然就是生成的问题,生成页面的时候要支持web的生成和服务器的生成。通过服务器的生成来解决好数据的分布问题和多服务器的场景这些的。 9:同时支持动态和生成静态页面的浏览。
一直也想不到好的方案,然后老规矩看代码,开源的诸如Stefano写的StringTemplate,不大好用。然后继续看,找到了Ader Template Engine这个模版引擎非常棒,不过貌似04年作者也早没更新了,代码写的很Good.然后再一看mit开源协议,果断的下代码,修改之。于是就有了Doodle.CMS今天的开源模版引擎。
.....(三个多小时过去了)
一通修改之后就有了这样的模板语句。
<#mssql query="SELECT TOP 10 * FROM ex_Users" out="User" /> <#foreach collection="${User}" var="userinfo" index="i"> ${userinfo["userid"]}
<#/foreach>
于是就把ex_Users的数据给直接显示出来了。
于是判断语句就变成了
<#set name="catid" value="${request.Get("id")}" /> ${catid}
<#if test="${catid is "mcc" }"> 是mcc <#else> NO FUCK <#/if>
然后Ader Template Engine的代码就被最后改成了一个快速完整的视觉引擎了。UI和代码完全的分离了。虽然不对象,但是快捷就好。配置下数据库连接,直接的修改模板数据显示就O了。
再然后果断测试上面的前9条要求,OK效果达到了。果断休息。
下篇直接放代码和类库。代码托管到Google。使用Apache协议。 下下篇讲完整的语法以及逻辑表达式。
Tags:  织梦cms模板 aspcms模板 phpcms模板 帝国cms模板 cms模板

延伸阅读

最新评论

发表评论