Velocity和XTemplate(简称xtpl)模板

gogoy / 2024-04-22 / 原文

Velocity 和 XTemplate 是两种不同的模板引擎,它们用于在Web服务器或应用程序中动态生成HTML或其他文本格式。

Velocity:

Velocity 是 Apache Software Foundation 领导的一个项目,它提供了一个基于Java的模板引擎。Velocity 使用类似于HTML的标记语法,并允许开发者在模板中插入引用动态内容的占位符。这些占位符被绑定到后端Java对象中的数据,这样在渲染时即可动态生成页面内容。Velocity 还支持条件语句、循环和宏定义,使得模板能够处理较为复杂的逻辑。

一个简单的Velocity模板例子:

 1 <html>
 2 <head>
 3    <title>Welcome to Velocity</title>
 4 </head>
 5 <body>
 6    <h1>Hi, $name!</h1> <!-- $name 将被动态替换成一个变量值 -->
 7    #foreach ( $product in $products ) <!-- Velocity 的循环语句 -->
 8      <p>$product.name: $product.price</p><!-- 获取产品名称和价格 -->
 9    #end
10 
11    <script src="/js/myScript.js?version=$jsVersion"></script>
12 
13 </body>
14 </html>

 

这里,$name$products 是模板变量,它们会被Java后端中的对应变量的值所替换。

 

在这个例子中,$jsVersion 是从服务端传递到模板的变量,它被用来动态生成JavaScript文件的URL。通过在文件URL中添加查询参数(如 ?version=1.2.3),可以有效地避免浏览器缓存问题,因为每次版本号更改时,URL都会变得不同。这样确保了用户总是请求最新版本的JavaScript文件,而不是从浏览器缓存中加载旧版本。

这种技术不限于JavaScript文件;它同样适用于CSS文件或任何其他需要缓存管理的资源文件。只需要确保服务端提供正确的版本号,并在模板中正确插入这个版本号即可。

用户访问的时候

Velocity模板是一种服务端渲染(Server-Side Rendering, SSR)技术。当服务器接收到一个HTTP请求时,服务端的应用程序会使用Velocity模板引擎来填充模板中的动态数据,并生成最终的HTML文本,然后将这个渲染好的HTML作为响应发送回客户端。客户端的浏览器然后展示这个HTML给用户。

 

  • 资源推送链路:
    • 前端开发Velocity模板后(java服务端代码),应用变更,其中的jsVersion保存在配置中心待前端资源发布后再推送最新版本
    • js、css修改后,前端发布 推送到CDN
  • 用户请求/访问链路:
    • 用户请求到服务端,服务端模板引擎会去替换模板里的占位符,生成最终的HTML,返回给浏览器
    • 浏览器拿到HMTL进行解析dom结构等,看到引用的js、css等,去CDN请求
 

XTemplate(简称xtpl):

XTemplate 是由腾讯AlloyTeam开发的一个前端JavaScript模板引擎,它主要用于在Web浏览器中动态生成HTML。XTemplate 的特点包括易于调试、内置支持业务逻辑、和允许自定义函数等。XTemplate 很适合结合现代的前端框架如React、Vue.js或Angular使用。

一个简单的XTemplate模板例子:

<div>
  {{#each products}}
    <div class="product">
      <h3>{{this.name}}</h3>
      <p>Price: {{this.price}}</p>
    </div>
  {{/each}}
</div>

在这个例子中,{{#each products}} 是XTemplate的循环语句,它会遍历 products 数组,并为数组中的每个项目创建一个产品描述块。和Velocity一样,{{this.name}}{{this.price}} 是模板占位符,它们会被绑定数据的对应属性替换。

需要注意的是,因为Velocity 和 XTemplate 属于不同的技术范畴(后端模板引擎 vs 前端模板引擎),所以除了模板语法外,它们在实现和使用上会有较大的不同。如果您在提问中的 "XTemplate" 指的是某个特定的与Velocity类似的后端模板引擎,请提供更多的上下文,以便于得到更精确的解答。

总的来说,这些模板引擎通过提供简洁、表达性强的模板语言,简化了动态内容的生成,使得开发者可以更加专注于应用逻辑和内容本身。