JavaScript模板引擎综述

我们将通过本文对JavaScript的模板有一个大致了解。在详细了解时下比较流行的几个模板引擎之前,我会先介绍一下什么是JavaScript模板以及该何时使用和怎么使用这些模板。我会着重讲一下Mustache,HandlebarsjQuery模板

什么是JavaScript模板?

JavaScript模板是将HTML结构与其具体内容相分离的一种手段。模板系统通常会引入一些新的语法,不过这些语法使用起来十分方便,尤其是在别处使用过模板系统的情况下(eg.PHP的Twig)。但是需要留意一个有趣的地方:token的替换通常是以双括号为标识({{...}}),Mustanche和Handlebars的名字就是因为这而来的(把它俩放一块比较一下吧)。

我们应该在什么时候使用JavaScript模板?

一旦发现HTML被放到了JavaScript文本中,我们就应该考虑一下JavaScript模板是不是会带来什么益处。构建可维护代码库时,最重要的一件事就是关注点分离(注:SOC),所以任何对此有用的方法都应该被探索。在前端开发领域,将HTML与JavaScript分离是SOC的主要部分。(同样我们也不应该将JavaScript代码放到HTML中)。

需要经常使用相同格式显示不同内容的real-time web app(比如新闻直播)或者国际化(i18n)产品是从JavaScrippt模板受益的普遍情况。

我们如何使用JavaScript模板?

在这里我会通过一些具体的库来详细说明,但是本质上来讲,包括我们的库在内的模板都很简单。给这些模板添加一些数据试试。

mustache.js

Mustache是一个多语言,无逻辑的模板系统。Mustache.js只是其中一种,所以只要学会了它的语法(相当简单),就能在许多别的编程语言中同样使用。

要点:

  • 9Kb体积(小)
  • 简单
  • 无依赖
  • 无逻辑
  • 无预编译模板
  • 与编程语言无关

例:

  1. <script id="template" type="x-tmpl-mustache">
  2. <p>Use the <strong>{{power}}</strong>, {{name}}!</p>
  3. </script>
  1. //Grab the inline template
  2. var template = document.getElementById(‘template‘).innerHTML;
  3. //Parse it (optional, only necessary if template is to be used again)
  4. Mustache.parse(template);
  5. //Render the data into the template
  6. var rendered = Mustache.render(template, {name: "Luke", power: "force"});
  7. //Overwrite the contents of #target with the rendered HTML
  8. document.getElementById(‘target‘).innerHTML = rendered;

demo

从例子中可以看到,Mustache.render函数接收两个参数:Mustache模板,一个包含数据和需要在模板中使用的代码的view对象。在本例中,我们使用一些简单字符代替name和power变量,不过它的功能不止这些。比如:遍历一个数组,或者让一个使用当前view作为view参数的特殊渲染函数生效。

mustache.js适合较小的工程和不需要太多模板的快速原型。值得注意的一点是:我们可以使用mustache.js开始一个项目,后面再轻松升级为Handblebars.js。以为这些模板大部分一样。

Handlebars.js

handlebars.js是在Mustache的基础上编写的,因此可以兼容大部分Mustache模板。简而言之,它提供了Mustache所提供的一切,同时增加了对块表达式和预编译模板的支持。预编译模板是一件十分了不起的事,因为它大幅度提升了性能。(在一个极限性能测试中,预编译模板的渲染时间只有Mustache模板的一半)。块表达式允许你在模板中添加逻辑;最常见的例子是高级迭代-比如创建一个每个条目都用<li>包装的<ul>列表迭代器。你可以在这里获取关于块表达式的更多内容。

要点:

  • 86kb体积(大),使用预编译模板为18kb
  • 块表达式(辅助)
  • 预编译模板
  • 非独立

例:

  1. <script id="template" type="text/x-handlebars-template">
  2. <p>Use the <strong>{{power}}</strong>, {{name}}!</p>
  3. </script>
  1. //Grab the inline template
  2. var template = document.getElementById(‘template‘).innerHTML;
  3. //Compile the template
  4. var compiled_template = Handlebars.compile(template);
  5. //Render the data into the template
  6. var rendered = compiled_template({name: "Luke", power: "force"});
  7. //Overwrite the contents of #target with the renderer HTML
  8. document.getElementById(‘target‘).innerHTML = rendered;

又到了点我看demo环节

Handlebars.js适合不需要担心页面增加额外18kb内容同时性能又十分重要的项目。同时这也是需要块表达式时的解决方案。

注意,如果想体验Handlebars.js在性能上的优势,我们必须使用预编译模板(这同样大大 减少了文件体积)。为了高效的实现目的,我们需要在工程中添加Handlebars,js的模板编辑附件(Grunt has a great plug-in for this)。

如果想更加深入的了解Handlebars,看这里:A Beginner‘s Guide to Handlebars

jQuery 模板

jQuery模板就没有Mustache.js和Handlebars.js这么受欢迎了。但是我们也应该看看(我觉得不看也行)。这个模板和Mustache模板有些不同,因为它只是一些普通的HTML,没有什么新的语法。不同于token的替换,它使用data属性来指明在HTML骨架中需要插入数据的地方。

要点:

  • 7kb体积(小)
  • 依赖jQuery(+82kb)
  • 简单,但是和Mustache以及Handlebars.js的工作原理都不一样
  • 无预编译模板

例:

  1. <script id="template" type="text/html">
  2. <p>
  3. Use the <strong data-content="power"></strong>,
  4. <span data-content="name"></span>!
  5. </p>
  6. </script>
  1. //Call .loadTemplate() on the target container
  2. $(‘#target‘).loadTemplate(
  3. //Specify the template container (or file name of external template)
  4. $(‘#template‘),
  5. //Specify the data to render
  6. {
  7. name: "Luke",
  8. power: "force"
  9. }
  10. );

又到了我最不喜欢的环节(点我看demo)

jQuery模板是为已经使用jQuery的项目提出的,因为它的文件很小。不过如果你的项目里没用jQuery,天哪,那你就得好好考虑一下总的体积是多大了。

其它选择

此问题当然还有许多别的文中无法一一明述的解决方案。我们就草草的提一笔好了:

Underscore.js

Underscore是一个流行的JavaScript库,模板功能只是它众多功能的一个。不同于Mustache使用双花括号,它默认使用的是ERB-style的分隔符(< %…% >)。

Embedded JS Teamplates(EJS)

像Underscore.js,Embedded JS Templates使用ERB-style模板语法。EJS需要注意的一件事情是,必须是外部文件——他们不能有内联模板。

结束语

那么哪一个是最好的呢?和许多开发问题一样,没有好主意。答案取决于很多方面:

  • 你是否已在项目中使用了jQuery
  • 你以前使用过什么模板系统
  • 你是否想把模板与逻辑分离
  • 你有多担心文件总体积
  • 你有多担心性能问题/你的网站需要支持低性能设备吗?

一旦这些问题有了答案,那么我们就可以在上面的列表中做一个选择。但前面提到过,一个灵活的策略是先使用Mustache.js然后在功能或性能有要求的时候升级为Handlebars.js。

原文链接:http://www.gbtags.com/gb/share/9662.htm

时间: 2024-08-12 15:43:21

JavaScript模板引擎综述的相关文章

JavaScript模板引擎

JavaScript模板引擎实例应用 在之前的一篇名为<移动端基于HTML模板和JSON数据的JavaScript交互>的文章中,我向大家说明了为什么要使用JavaScript模板以及如何使用,文末还提到了laytpl.artTemplate.doT.baiduTemplate.kissyTemplate等模板引擎. 本文将举实例向大家讲解几个常用模板引擎的简单使用. 演示地址:模板引擎示例http://demo.52fhy.com/jstemp/ 准备工作 演示数据:blog.json结构:

推荐13款javascript模板引擎

javaScript 在生成各种页面内容时如果能结合一些模板技术,可以让逻辑和数据之间更加清晰,本文介绍 X 款 JavaScript 的模板引擎.(排名不分先后顺序) 1. Mustache 基于javascript 实现的模板引擎,类似于 Microsoft’s jQuery template plugin,但更简单易用! 2. EasyTemplate 在使用过Freemarker模 板后,感觉它的 语法比较朴实,平易近人,容易上手,于是决定按它的语法风格实现一个前端的 模板引擎,这就有了

新一代 javascript 模板引擎

artTemplate-3.0 新一代 javascript 模板引擎 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> </head> <script type="text/javascript" src="js/template.js"></script> <

发布一个开源极致的javascript模板引擎tpl.js

tpl.js(大家直接去https://git.oschina.net/tianqiq/tpl.js这个上面看) 简介 tpl.js是一个比较极致(极小,极快,极简单)的js模板引擎,可以在各种js环境中使用. 特性 1. 使用js作为模板语言,几乎无学习成本 2. 小巧,速度快到极致 3. 极简的语法,模板书写非常流畅 4. mit开源,无限制 语法说明 简述 tpl.js中模板语法中以行为单一,分为js行语句,和输出行语句.顾名思义,js行语句是编译时候会当做js执行的语句, 而输出行语句,

JavaScript模板引擎使用

1. [代码]tmpl.js     // Simple JavaScript Templating// John Resig - http://ejohn.org/ - MIT Licensed(function() {var cache = {}; this.tmpl = function tmpl(str, data) { // Figure out if we're getting a template, or if we need to// load the template - an

JavaScript模板引擎学习分享

为了将数据库中的一组记录转换成HTML输出到界面上,大家都采用哪些做法呢? 在WebForm时代我们经常使用datagrid.repeater,当MVC问世后我们开始直接在视图上编写C#循环语句,而现在我更喜欢使用JavaScript模板引擎来生成HTML.因为这种做法的最大好处是实现了前后端代码的解耦,前端开发人员也无需了解太多的C#知识. 用法与示例: 第一步,在页面中引入JavaScript模板引擎: function template(str, data) { var strFunc =

如何选择Javascript模板引擎(javascript template engine)?

译者 jjfat 日期:2012-9-17  来源: GBin1.com 随着前端开发的密集度越来越高,Ajax和JSON的使用越来越频繁,大家肯定免不了在前台开发中大量的使用标签,常见到的例子如下: 你的到了一个JSON对象,如下: var data={   email: '[email protected],   gender: 'male'  } 然后你需要将json数据组织成页面内容,如下: var email, gender; email= '<div class="mail&q

JavaScript模板引擎实例应用

http://www.cnblogs.com/52fhy/p/5393673.html artTemplate 这个还是比较有名的. 简介: artTemplate-3.0 新一代 javascript 模板引擎 https://github.com/aui/artTemplate template.js (简洁语法版, 2.7kb) 支持if等语句{{ if admin }} {{/if}} template(id, data) 根据 id 渲染模板.内部会根据document.getElem

Javascript模板引擎mustache.js详解

mustache.js是一个简单强大的Javascript模板引擎,使用它可以简化在js代码中的html编写,压缩后只有9KB,非常值得在项目中使用.本文总结它的使用方法和一些使用心得,内容不算很高深,纯粹是入门内容,看看即可.不过要是你还没有用过此类的javascript引擎库,那么本文还是值得你一读的,相信在你了解完它强大的功能和简单用法之后,一定会迫不及待地将之用于你的工作当中. 1. 从一个简单真实的需求讲起 目前公司做了一个统一的开发平台,后台封装了MVC的接口和数据增删改查的接口,前