Dust一个适用于浏览器与node的异步模板框架。

先上实例

后端模板:

{@inject api="http://api.myserver.com/get_message"}
<h3> 留言: {count}条</h3>
{#messages}
<p>{.}</p>
{/messages}
{/inject}

http://api.myserver.com/get_message 返回结果:

{
count: 3,
messages: ['我勒个去', '好强大啊', '受不了了']
}

渲染结果:

<h3>留言: 3条</h3>
<p>我勒个去</p>
<p>好强大啊</p>
<p>受不了了</p>

Dust的特性

所有用过Angularjs的同学,一定不会忘记它强大的模板、数据绑定等功能,而这些在后端往往都是可盼而不可求的。由于某些原因,我们产品需要改为在后端渲染html,再发送到前端,但早已经适应Angularjs的我根本不能忍受后端各种弱爆了的模板。类似如jade这些都只能等你把数据全部准备好之后才能工作,如果遇到复杂点的pjax页面当时就傻逼了。而我需要的是类似Angularjs的那种,只用把依赖关系和数据位置都写清,然后从数据请求到发送到客户端折=这一些列流程它自己跑起来的那种模板。

就在前几天,我突然脑洞大开的在google上搜索了“async node template”,居然搜索到了Dust这货。 其主页第一句介绍的话就是:

Asynchronous templates for the browser and node.js

而且这个项目又是有 LinkedIn 在背后做支持,当时感觉就是碉堡了。他的项目主页在 http://linkedin.github.io/dustjs/

那么现在回到最上面的模板代码,这段代码的作用是 请求远程服务器的get_message链接,再将服务器返回的数据注入到模板中。如果你采用类似淘宝那种架构的话(node只负责渲染页面),那么这个就很好用,开发者就不用再管理链接请求啊,维持依赖啊等等这些琐碎的事了。

Dust本身的语法可谓相当灵活,还有强大的扩展功能,他可以渲染html、xml等任何格式的文本文件,还支持模块化、partial,条件判断,流输出等其它特性。

源码

上面例子中的@inject就是我自己写的dust扩展。源码如下:

function requestAPI(url,cb){
//请求url,并将结果返回,cb 的格式为 function(err,result)
}; dust.helpers.inject = function(chunk, context, bodies, params) {
var api=params.api; if(api){
return chunk.map(function(chunk){
requestAPI(api,function(err,result){
if(err&&bodies['else']){
chunk.render(bodies['else'],context.push({error:err}));
}else if(bodies.block){
chunk.render(bodies.block,context.push(result));
}
chunk.end();
});
})
}else{
return chunk.render(bodies.block,context);
}
}

刚才的模板还可以加入else模块,用来捕捉错误:

{@inject api="http://api.myserver.com/get_message"}
<h3> 留言: {count}条</h3>
{#messages}
<p>{.}</p>
{/messages}
{:else}
You got an Error: {error}
{/inject}

后端渲染神器!Dust的更多相关文章

  1. avalon2的后端渲染实践

    avalon2为了提高性能,采用全新的架构,四层架构,其中一层为虚拟DOM. 虚拟DOM的一个好处是能大大提高性能,另一个好处是能过错整描述我们的页面结构.因此在非浏览器环境下,虚拟DOM也能正常运行 ...

  2. [转]谈谈前端渲染 VS 后端渲染

    首先,预编译跟前后端没有关系,预编译一样可以用于后端渲染. 看看下面的测试时间,单位: ms 模板字符串: var s = '{{#datas}}{{name}} abcdefg {{type}} { ...

  3. 后端渲染html、前端模板渲染html,jquery的html

    作者:赵魏璇链接:https://www.zhihu.com/question/28725977/answer/116177149来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  4. 理解Web路由(浅谈前后端路由与前后端渲染)

    1.什么是路由? 在Web开发过程中,经常会遇到『路由』的概念.那么,到底什么是路由?简单来说,路由就是URL到函数的映射. 路由的概念最开始是由后端提出来的,在以前用模板引擎开发页面的时候,是使用路 ...

  5. Nuxt.js logoVue.js 后端渲染开源库 Nuxt.js

    Nuxt.js 是一个通过 Vue 用于服务端渲染的简单框架,灵感来自 Next.js. 目前尚处于开发阶段,1.0 版本即将发布 1 分钟视频演示 Nuxt 基于 ES2015,这使得代码有着更愉快 ...

  6. 后端分页神器,mybatis pagehelper 在SSM与springboot项目中的使用

    mybatis pagehelper想必大家都耳熟能详了,是java后端用于做分页查询时一款非常好用的分页插件,同时也被人们称为mybatis三剑客之一,下面 就给大家讲讲如何在SSM项目和sprin ...

  7. 基于jeesite的cms系统(四):使用Beetl模版引擎在后端渲染数据

    一.Beetl简介 1. 什么是Beetl Beetl目前版本是2.9.3,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,以及编写的模板容易维护等特点.使得开发和维护模板有很好的体验. ...

  8. 谈谈渲染,玩玩nginx——前后端分离,转发请求到Tomcat的尝试

    一.谈谈"渲染" 相信好多人都挺听过"渲染"这个词,但不清楚它是什么意思?前端开发以为这是后端的活儿,后端开发以为是前端的事儿,推着推着就不了了之.其实渲染很简 ...

  9. 细说后端模板渲染、客户端渲染、node 中间层、服务器端渲染(ssr)

    细说后端模板渲染.客户端渲染.node 中间层.服务器端渲染(ssr) 前端与后端渲染方式的发展大致经历了这样几个阶段:后端模板渲染.客户端渲染.node 中间层.服务器端渲染(ssr). 1. 后端 ...

随机推荐

  1. 微信小程序缓冲类的封装

    1:utils 目录下新建一个Cache.js文件 2:文件下书写以下代码: // 缓存类 class Cache { // 构造方法 单位秒 constructor({ expire = 3600 ...

  2. 微信小程序知识点汇总

    微信小程序常用标签与HTML的对应关系 <div></div> <view></view> <h1></h1>...<h6 ...

  3. tp5用户id登录进行权限设置

    HTML代码:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  4. Vue2.0双向数据绑定原理

    Object.defineProperty(objectName, key, option); Object.defineProperty()可以直接在一个对象上定义一个新属性, 或者修改一个属性, ...

  5. 原生JS添加事件方法

    事件 事件添加方式 EvenTarget.addEventListener(EvenName, functionName, option); EventName: example => clic ...

  6. 打靶笔记-03-vulhub-Moriarty Corp

    打靶笔记-03-vulhub-BoredHackerBlog 一.靶机信息 Name: BoredHackerBlog: Moriarty Corp(中-高级难度) Date release: 29 ...

  7. 网易互娱23届实习笔试_3x3锯齿数独

    一.输入: 输入一个3x3数独,字符'.'代表空输入三个宫的域,每个宫包括三个位置,[0,0]表示0行0列 二.输出要求: 1.每个宫里最终123各出现一次, 2.数独中的行列里不出现重复字符: 输出 ...

  8. 机器学习之BP神经网络

    import random import math #神经元的定义 class Neuron: def __init__(self,bias): self.bias = bias self.weigh ...

  9. MySQL CREATE TABLE 简单设计模板交流

      推荐用 MySQL 8.0 (2018/4/19 发布, 开发者说同比 5.7 快 2 倍) 或同类型以上版本. CREATE TABLE TEMPLATE CREATE TABLE [table ...

  10. 自动化运维之SaltStack初探

    1.1.基础环境 linux-node1(master服务端) 192.168.31.46 CentOS 6.6 X86_64 linux-node2(minion客户端) 192.168.31.47 ...