`
san_yun
  • 浏览: 2652429 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

freemarker性能问题

 
阅读更多

今天对blogDetail性能测试,相比django, ibatis+mongodb/mysql+spring mvc给力太多。之前在django上面需要200多ms在,tomcat只需要40ms,后端control通过btrace打点耗时20ms,  模板20ms,freemarker的性能确实不怎样。(这里忽略了spring-mvc的执行时间,应该耗时不多)



 



 

freemarker和velocity的核心实现都是一样的,都是先用JavaCC把文法文件转换成Parser和TokenManager,
然后Parser和TokenManager在运行时把模板解析为一棵抽象语法树(AST),最后再从上往下遍历这棵树,树结点有很多类型(比如Reference、Method、MathNode等等),对这些树结点"求值",最后把结果放入一个Writer中。

 

从淘宝那边了解到,他们也在对Veclocity的执行效率优化。如果只是将Velocity编译成弱类型字节码,性能提升不会太大,JavaCC生成的AST就算是解释执行效率也是很高的,反而对String和byte的多次encode/decode转化处理下,提升的非常明显。因为一个页面90%都是静态的html,大概原理是将这html预先生成byte并cache住,再对动态变量生成string字符串,只对这10%的decode后转成byte,最后输出时将两段byte拼接一下即可,从测试的数据看,将大模板折成小模板(提升35%),将String缓存后,用byte[]输出,性能提升幅度很大(提升50%),而编译成字节码反而收效少(提升10%)。

 

附件中淘宝做了一个测试char to byte的对比,性能提升明显

//测试例子1:
private static String content = “...94k...”;
protected doGet(...){
response.getWrite().print(content);
}


//测试例子2:
private static String content = “...94k...”;
Private static byte[] bytes = content.getBytes();
protected doGet(...){
response.getOutputStream().write(bytes);
}

qps:1800
qps:3500

 

可以参考附件的淘宝前台系统优化实践

  • 大小: 113.7 KB
  • 大小: 124 KB
分享到:
评论

相关推荐

    freemarker 自定义freeMarker标签

    FreeMarker提供了详细的日志输出,通过调整日志级别,你可以查看模板解析、执行的详细信息,这对于查找问题非常有用。 最后,关于标签的性能考虑,应避免在自定义标签中执行耗时操作,因为这会影响模板的渲染速度。...

    velocity和freemarker的比较

    - **性能**:FreeMarker通常在处理大量数据时表现更好,因为它优化了模板解析和执行。 - **学习曲线**:Velocity的学习曲线较平缓,适合初学者,而FreeMarker可能需要更多时间去熟悉其高级特性。 - **灵活性**:...

    FreeMarker通用的分页

    在FreeMarker中实现通用的分页功能是提高Web应用程序性能和用户体验的重要一环。 ### FreeMarker通用分页知识点解析 #### 1. 分页宏(Macro)定义 FreeMarker中的宏允许我们封装可重用的代码块,这在实现通用分页...

    freemarker-2.3.23jar

    6. **缓存机制**:Freemarker支持缓存机制,可以提高性能,减少不必要的模板解析和编译。 7. **国际化和本地化**:Freemarker支持多语言环境,可以方便地切换不同的语言版本。 8. **错误处理**:当模板存在错误时...

    模板:velocity和freemarker的比较

    首先,从功能上来讲,Freemarker 在 View 层提供了 format 日期和数字的功能,这个功能非常贴心,解决了我们在页面上格式化日期或数字的问题。 Velocity 也提供了类似的功能,但是 Freemarker 的实现更加完善。 ...

    FreeMarker手册-Freemarker 2.3.18

    FreeMarker 2.3.18是该引擎的一个版本,它提供了一系列的更新和改进,以提高性能和易用性。 1. **模板语言基础** FreeMarker的模板语言是一种声明式的编程方式,它允许开发者通过简单的标记语法来控制输出。这些...

    freemarker各种版本的jar包

    以下是对给定的Freemarker不同版本jar包的详细说明: 1. **Freemarker 2.3.19**: - 这个版本可能包含了一些基本的功能,如模板语言的语法,变量、表达式和控制结构。 - 它可能已经支持了数据模型绑定,允许...

    freemarker-2.3.28.jar

    5. **错误处理与调试**: Freemarker提供了详细的错误报告,帮助开发者定位和修复模板中的问题。此外,还可以设置调试模式,获取更丰富的调试信息。 6. **国际化支持**: Freemarker支持多语言环境,可以通过不同语言...

    初试FreeMarker模板的一些问题

    这篇名为“初试FreeMarker模板的一些问题”的博客可能涵盖了在学习和使用FreeMarker过程中遇到的基础问题和解决方法。 1. **模板语言基础** FreeMarker使用模板语言来定义如何将数据模型渲染成可读的输出。模板由...

    FreeMarker2.3.23官方中文文档

    7. **模板缓存**:为了提高性能,FreeMarker可以缓存编译后的模板,减少模板解析和编译的时间。 8. **模板调试**:FreeMarker提供了调试工具,帮助开发者定位模板中的错误和问题,提高开发效率。 9. **与Spring...

    FreeMarker

    9. **缓存机制**:为了提高性能,FreeMarker 可以缓存编译后的模板,避免每次请求都重新编译。同时,开发者也可以自定义缓存策略,以适应不同的应用场景。 10. **与其他技术的集成**:FreeMarker 能很好地与Spring...

    Velocity 和 FreeMarker区别

    - **FreeMarker**拥有一个庞大的用户群和活跃的社区支持,这意味着在遇到问题时更容易找到解决方案。 - **Velocity**虽然社区规模较小,但也有一批忠实的用户和支持者。 #### 六、应用场景 - **Velocity**更适合于...

    freemarker-2.3.22

    6. **错误处理**:当模板语法错误或数据模型问题出现时,Freemarker提供详细的错误报告,帮助开发者定位问题。 7. **API使用**:在Java代码中,开发者可以通过`Configuration`类配置Freemarker,并使用`Template`类...

    freemarker生成xml示例

    这个示例是关于如何使用Freemarker来生成XML文件,对于初学者来说,理解这个过程有助于掌握Freemarker的基本用法和XML的生成技巧。 在Java中,Freemarker与数据模型结合,通过模板文件生成输出。对于XML生成,首先...

    freemarker中文学习资料

    - **模板缓存**:Freemarker支持模板缓存,提高性能。 4. **数据模型和对象** - **Map对象**:Freemarker支持Java Map对象作为数据模型,键值对可以通过模板语法访问。 - ** Beans**:可以直接使用Java Bean对象...

    freemarker语法完整版

    提高Freemarker性能** - 设置 `template_update_delay` 避免频繁加载模板。 **9. 使用Freemarker内置标签** - 尽量使用Freemarker自带的标签以提高性能。 **10. 特殊指令** - `r` 原样输出。 - `?` 引出内置...

    freemarker解析成pdf

    同时,为了提高性能和代码可维护性,模板文件应与Java源代码分离,存储在类路径的某个资源目录下。 在提供的压缩包`demo`中,可能包含了示例模板文件和相关的Java代码。通过学习和运行这些示例,你可以更直观地理解...

    Freemarker分页

    Freemarker分页是Web开发中的一个重要概念,它主要用于在大量数据展示时,将结果集分割成多个小块,每次只加载一部分数据,提高页面加载...记得在实际操作中,还要注意数据库查询优化,避免因分页查询导致的性能问题。

    struts2+freemarker

    4. **强大的拦截器机制**:Struts2的拦截器可以实现登录检查、权限控制、性能监控等功能,提高了应用的安全性和效率。 5. **自定义标签库**:Struts2支持自定义标签,结合Freemarker的模板,可以创建出易于理解和...

    FreeMarker文档.CHM

    5. **缓存机制**:为了提高性能,FreeMarker可以缓存编译后的模板,避免每次请求时都重新解析和编译。 6. **安全特性**:FreeMarker允许限制模板的执行权限,防止恶意用户通过模板注入攻击。 7. **预处理与后处理*...

Global site tag (gtag.js) - Google Analytics