FED实验室 - 专注WEB端开发和用户体验

Velocity模板引擎解析原理

VELOCITY 煦涵 3302℃ 0评论

Velocity 是一个基于 Java 的模板引擎,它允许任何人仅仅简单的使用模板语言来引用由 Java 代码定义的对象,从而实现界面和 Java 代码的分离,使得界面设计人员可以和 Java 程序开发人员同步开发一个遵循 MVC 架构的 web 站点。但是在实际应用过程中,Velocity 又不仅仅被用在了 MVC 的架构中。

本文虽然标题是引擎解析原理,考虑到一个前端狗对java的熟练度,从网络收集来的资料感觉比自己酝酿的要到位,具体见下面参考链接,所以下面想讲述下使用中遇到的一些问题:

1. 优化CSS/JS资源的解析
在Velocity 1.6中,可以通过#[[]]#来屏蔽模板,以使其不被模板引擎解析,尤其当我们通过自动编译工具把css/js inline到页面中时,这种可以有效提高模板解析效率.

Since 1.6, there has been a lot of work. Here's an overview:
Support macro bodies. Just call them like this: #@foo() body content #end
Can now escape single and double quotes in strings by doubling them
Added #[[this is included in the output but not parsed]]# syntax to replace #literal
All #set calls are now global by default; no more implicit local namespaces (not that there were well functioning ones before). To #set a local variable, use the new provided namespaces: $foreach, $macro, $template, $evaluate, $define and $foo (would exist inside the body of #@foo() #end). These must now be used to #set any variable "locally" like this: #set( $macro.mylocal = 'foo' ). When nested, access to parent namespaces is similarly explicit (e.g. $macro.parent). Please see the change log for details.
Enhanced #break to function anywhere and optionally accept a namespace argument when you want to break beyond the nearest scope. (e.g. #break( $macro ))
Added bracketed index syntax: $foo[0] or #set( $foo[0] = 1 )
#stop now ends rendering/execution of a template, not parsing of a template
OSGI-ready manifests are now provided in the jars
A variety of small bugfixes, performance boosts and better exceptions/logging.
Removed very obsolete Veltag and WebMacro conversion code.

2. JS资源中使用模板变量
当我们使用Jquery/Zepto时,可能你会这样定义js变量,$aa = "我是js变量",如果不采用1中描述的屏蔽解析,可能会出现模板变量和js变量重名的问题,从而解析模板时,被模板引擎替换.这个需要注意.
3. 宏定义的使用
在前端开发中,基本velocity的模板使用宏定义可以有效使用模块化,从而提高开发效率和代码的可维护性.
4. List/Map的使用
在写velocity模板时,需求可能是多种状态对应的多种需求,如果我们使用List/Map可以有效减少#if #else #end的使用频率,代码的可维护性也会有所改善.
5. 关于自定义指令
Velocity中有两种指令,inline and block directives , 具体可参考下面自定义指令文章.

参考资料

Velocity Developer Guide
Velocity源码分析(一)——概述
Velocity源码分析(二)——渲染执行之Introspection
Creating Custom Directives for Apache Velocity
velocity的一些优化记录
VelocityTools wiki

下面是「FED实验室」的微信公众号二维码,欢迎扫描关注:

FED实验室

行文不易,如有帮助,欢迎打赏!

赞赏支持or喜欢 (0)or分享 (0)
捐赠共勉
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址