论坛首页 Java企业应用论坛

比Velocity快10倍的模板引擎

浏览 55867 次
该帖已经被评为精华帖
作者 正文
   发表时间:2011-09-15  
bao231 写道
还有就是有人自定义类型冲在了equle和hashcode的方法,你能保证他们的identityHashCode一样吗?

switch优化只针对基本类型,如果case的值不是字面的,不会优化,因为实际使用中,模板中条件以及输出都是使用基本类型的数据,不管是POJO, Map, List,最终的叶子属性节点都是基本类型。
0 请登录后投票
   发表时间:2011-09-15  
为什么不做一些别人没做过的东西?
0 请登录后投票
   发表时间:2011-09-15  
各种爱好而已,
0 请登录后投票
   发表时间:2011-09-15  
bewithme 写道
为什么不做一些别人没做过的东西?

学习,爱好,兴趣,就算是模仿,那也不错啊。
有一句话叫不要重复造轮子,但100年前的轮子和现在的轮子,一样么?

0 请登录后投票
   发表时间:2011-09-16  
只能适用于html,这样的局限性,速度应该比velocity快
0 请登录后投票
   发表时间:2011-09-16  
论据不充分!
0 请登录后投票
   发表时间:2011-09-19  
javatar 写道
sslaowan 写道
javatar 写道
bao231 写道
感觉楼主应该说一下httl为什么比其他的快这么多,做了哪些技术优化,像温少一样,有个技术内幕之类的东西。这样才能有人用,否则大家都是一团雾水撒,谁还敢用呢,期待

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


那为啥不用jsp标签呢?


JSP的标签有Tag扩展点(JSTL是基于Tag扩展点的),实际上是解释执行的,EL也是解释执行,而且在编译期不知道参数类型,不能在编译期推演变量类型,在解释时会慢一些。


为什么你会认为JSP标签是解释型的?怎么理解你的解释执行?起码Tomcat对于JSP标签是生成了具体的Java代码,然后调用对应的类的方法去执行。
0 请登录后投票
   发表时间:2012-06-11  
javatar 写道
agapple 写道
你这里说是减少boxed/unboxed的处理,主要是体现在哪个方面?默认都转化成对象处理吗?

一般的模板引擎都将数字boxed成Object再处理,因为要反射,而模板上大量使用基本类型输出,优化是有意义的。


 

1.你得意思是把包装类全部翻译成数值类型处理,再用工具类实现包装类的方法吗?

2.减少int到Integer等元类型的boxed和unboxed,以及instanceof。出现instanceof的地方也一样,会尽量多态处理

关于instanceof的转化怎么实现呢?如果接口里面没有需要调用的的方法,你会手动再编译一个临时接口吗?前面讲已经定义好了变量的强类型,这种转换还有必要不

0 请登录后投票
   发表时间:2012-06-11  
感觉楼主的思路还是有很多可取之处的,精华奉上.
0 请登录后投票
   发表时间:2012-06-11  
javatar 写道
bao231 写道
System.identityHashCode(user.role),这个hashcode根据对象的地址的算的,你这样搞,会有问题的


嗯,知道identityHashCode是对象的地址,所以如果是字符串会先intern(),另外,因为条件上的"admin"和"member"是字面值,没有new String(),还有一个就是因为是实时编译,所以地址是相等的。




beetl里编译成java代码是这么处理switch case的

list list = Arrays.asList(new String[]{"a","b","c"});

swtich(list.indexof("b")){
   case 0:{};
   ........
}

用这种方式可以支持任何类型

文章里大家讨论的模板编译成class,以及二进制输出,beetl也有实现,有空可以共同讨论一下

 

0 请登录后投票
论坛首页 Java企业应用版

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