论坛首页 Java企业应用论坛

比Velocity快10倍的模板引擎

浏览 56240 次
该帖已经被评为精华帖
作者 正文
   发表时间:2011-09-14  
counters15 写道
还有个问题,就是编辑器。freemarker的eclipse插件不是很好用。不知道楼主有没有这方面计划?

嗯,后续会考虑实现IDE编辑器,以及单步执行调试器,模板设计之初就考虑了与IDE集成问题,一个是模板的自描述,一个是强类型,这两个可以给实现IDE的内容助手起很大帮助,Velocity的弱类型导致编辑器很难做。
0 请登录后投票
   发表时间:2011-09-14   最后修改:2011-09-14
sures 写道
支持楼主,除了保证速度,功能上也希望能胜过Velocity。最终还是功能取胜!

HTTL的各功能都可扩展和替换,就算就换语法也是可行的,所以后面会考虑同时解析Velocity语法。
另外,对于工具方法的扩展,HTTL比Velocity更直观,比如:
public class StringUtil {
    public static String escape(String value) {
        // ...
    }
}


(1) Velocity:
先配置tools扩展:
<toolbox>
  <tool>
    <key>stringUtil</key>
    <scope>application</scope>
    <class>com.xxx.StringUtil</class>
  </tool>
</toolbox>

然后当工具方法使用:
$stringUtil.escape($content)


(2) Httl:
先在httl.properties配置:
functions=+com.xxx.StringUtil

然后直接把StringUtil中的静态函数,当String的属性用:(语法上更面向对象)
$content.escape

基于静态方法的第一个参数类型识别,而且是编译期识别,直接将静态调用转成了字节码,不会影响性能。
0 请登录后投票
   发表时间:2011-09-14  
总体感觉是 你把 JSP 搬出来了。。
0 请登录后投票
   发表时间:2011-09-14  
javatar 写道
bao231 写道
感觉楼主应该说一下httl为什么比其他的快这么多,做了哪些技术优化,像温少一样,有个技术内幕之类的东西。这样才能有人用,否则大家都是一团雾水撒,谁还敢用呢,期待

说白了,就只是将模板转成Java源码,再将Java源码生成字节码,因JDK生成字节码的效率高,另外,基于强类型编译和类型推演,减少了运行时反射和判断,没什么太多内幕,看源代码就知道了,后面有空再补几个设计文档。


这样性能应该是接近JSP的。跟测试结果是一致的
0 请登录后投票
   发表时间:2011-09-14   最后修改:2011-09-14
Reset 写道
总体感觉是 你把 JSP 搬出来了。。

嗯,就是JSP的思路,说准确点是JSP的Scriptlet的思路,JSP的Taglib不是,而Scriptlet嵌在HTML中,对UI的开发影响太大,不被推荐,HTTL只是让它更像模板,JSP的Taglib和它的EL实际上是解释执行的,效率并不高。
0 请登录后投票
   发表时间:2011-09-14  
javatar 写道
Reset 写道
总体感觉是 你把 JSP 搬出来了。。

嗯,就是JSP的思路,说准确点是JSP的Scriptlet的思路,JSP的Taglib不是,而Scriptlet嵌在HTML中,对UI的开发影响太大,不被推荐,HTTL只是让它更像模板,JSP的Taglib和它的EL实际上是解释执行的,效率并不高。


你貌似没有写过 jsp标签 。。。 EL表达式应该也不是解释执行的。。
0 请登录后投票
   发表时间:2011-09-14   最后修改:2011-09-14
Reset 写道
javatar 写道
Reset 写道
总体感觉是 你把 JSP 搬出来了。。

嗯,就是JSP的思路,说准确点是JSP的Scriptlet的思路,JSP的Taglib不是,而Scriptlet嵌在HTML中,对UI的开发影响太大,不被推荐,HTTL只是让它更像模板,JSP的Taglib和它的EL实际上是解释执行的,效率并不高。


你貌似没有写过 jsp标签 。。。 EL表达式应该也不是解释执行的。。


至少tomcat使用的jaspper以及commons-el是采用JavaCC生成AST树,然后解释执行的,你可以看它们的源代码。
http://tomcat.apache.org/tomcat-6.0-doc/jasper-howto.html
http://commons.apache.org/el/
它们的源代码:
http://svn.apache.org/viewvc/tomcat/jasper/tc6.0.x/src/share/org/apache/el/parser/?pathrev=374092
http://svn.apache.org/viewvc/commons/proper/el/trunk/src/java/org/apache/commons/el/
里面都有ELParser.jj (JavaCC类似BNF的语法描述文件)
0 请登录后投票
   发表时间:2011-09-14   最后修改:2011-09-14
javatar 写道
Reset 写道
javatar 写道
Reset 写道
总体感觉是 你把 JSP 搬出来了。。

嗯,就是JSP的思路,说准确点是JSP的Scriptlet的思路,JSP的Taglib不是,而Scriptlet嵌在HTML中,对UI的开发影响太大,不被推荐,HTTL只是让它更像模板,JSP的Taglib和它的EL实际上是解释执行的,效率并不高。


你貌似没有写过 jsp标签 。。。 EL表达式应该也不是解释执行的。。


至少tomcat使用的jaspper以及commons-el是采用JavaCC生成AST树,然后解释执行的,你可以看它们的源代码。
http://tomcat.apache.org/tomcat-6.0-doc/jasper-howto.html
http://commons.apache.org/el/
它们的源代码:
http://svn.apache.org/viewvc/tomcat/jasper/tc6.0.x/src/share/org/apache/el/parser/?pathrev=374092
http://svn.apache.org/viewvc/commons/proper/el/trunk/src/java/org/apache/commons/el/
里面都有ELParser.jj (JavaCC的类似BNF的语法描述文件)



恩 EL表达式我不确定是不是解析执行的 (每个表达式要是都编译成class哪是很恐怖的。。), 不过jsp标签需要实现 javax.servlet.jsp.tagext.Tag 类,现在也可以编写 .tag文件来做jsp标签。

 

你的资料可真是全 ,看来参考了不少jsp的东西 

 

0 请登录后投票
   发表时间:2011-09-14  
以前用过common template感觉不错,只是性能不太好。
httl解决了这个问题,且不失可扩展性。不错啊。
0 请登录后投票
   发表时间:2011-09-14  
ray_linn 写道
指令采用 html 属性...光这个就让人快吐了。。

++1
在属性中使用太多逻辑,我有点害怕!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics