后端渲染神器!Dust
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的更多相关文章
- avalon2的后端渲染实践
avalon2为了提高性能,采用全新的架构,四层架构,其中一层为虚拟DOM. 虚拟DOM的一个好处是能大大提高性能,另一个好处是能过错整描述我们的页面结构.因此在非浏览器环境下,虚拟DOM也能正常运行 ...
- [转]谈谈前端渲染 VS 后端渲染
首先,预编译跟前后端没有关系,预编译一样可以用于后端渲染. 看看下面的测试时间,单位: ms 模板字符串: var s = '{{#datas}}{{name}} abcdefg {{type}} { ...
- 后端渲染html、前端模板渲染html,jquery的html
作者:赵魏璇链接:https://www.zhihu.com/question/28725977/answer/116177149来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- 理解Web路由(浅谈前后端路由与前后端渲染)
1.什么是路由? 在Web开发过程中,经常会遇到『路由』的概念.那么,到底什么是路由?简单来说,路由就是URL到函数的映射. 路由的概念最开始是由后端提出来的,在以前用模板引擎开发页面的时候,是使用路 ...
- Nuxt.js logoVue.js 后端渲染开源库 Nuxt.js
Nuxt.js 是一个通过 Vue 用于服务端渲染的简单框架,灵感来自 Next.js. 目前尚处于开发阶段,1.0 版本即将发布 1 分钟视频演示 Nuxt 基于 ES2015,这使得代码有着更愉快 ...
- 后端分页神器,mybatis pagehelper 在SSM与springboot项目中的使用
mybatis pagehelper想必大家都耳熟能详了,是java后端用于做分页查询时一款非常好用的分页插件,同时也被人们称为mybatis三剑客之一,下面 就给大家讲讲如何在SSM项目和sprin ...
- 基于jeesite的cms系统(四):使用Beetl模版引擎在后端渲染数据
一.Beetl简介 1. 什么是Beetl Beetl目前版本是2.9.3,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,以及编写的模板容易维护等特点.使得开发和维护模板有很好的体验. ...
- 谈谈渲染,玩玩nginx——前后端分离,转发请求到Tomcat的尝试
一.谈谈"渲染" 相信好多人都挺听过"渲染"这个词,但不清楚它是什么意思?前端开发以为这是后端的活儿,后端开发以为是前端的事儿,推着推着就不了了之.其实渲染很简 ...
- 细说后端模板渲染、客户端渲染、node 中间层、服务器端渲染(ssr)
细说后端模板渲染.客户端渲染.node 中间层.服务器端渲染(ssr) 前端与后端渲染方式的发展大致经历了这样几个阶段:后端模板渲染.客户端渲染.node 中间层.服务器端渲染(ssr). 1. 后端 ...
随机推荐
- vue项目环境搭建(webpack4从零搭建)--仅个人记录
一.nodejs环境搭建 首先需要下载node.js(推荐直接官网找最新的版本),下载完成后会自带npm包管理工具,打开cmd命令行界面,输入npm -v .node -v检查node.js与npm是 ...
- [USACO20FEB]Equilateral Triangles P 题解
优雅的暴力. 设三个点为 \((i,j,k)\),则有 \(6\) 个未知数即 \(x_i,x_j,x_k,y_i,y_j,y_k\).又因为有 \(2\) 条关于这 \(6\) 个未知数的方程 \( ...
- linux作业--第一周
1.按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别. 目前三大主流发行版分别为Debian.Redhat.SUSE. redhat: RHEL: Red Hat公司发布的面向企业用户的 ...
- 云图说|DRS数据对比——带您随时观测数据一致性
摘要:数据迁移过程中,如何保证数据不丢失,确保数据的一致性? 本文分享自华为云社区<[云图说]第226期 DRS数据对比--带您随时观测数据一致性>,作者:阅识风云 . 数据迁移过程中,如 ...
- tp5 webupload文件上传至七牛云
1:composer安装: composer require qiniu/php-sdk 2: 配置使用: 在tp5.1的配置文件app.php中配置七牛云的参数 'qiniu' => [ 'a ...
- think php jq ajax删除
表单展示页面 <!doctype html> <html lang="en"> <head> <meta charset="UT ...
- layui 的使用 表单的使用
<link rel="stylesheet" href="__STATIC__/layui/css/layui.css" media="all& ...
- Redis常用命令代码实例集合
//连接本地的 Redis 服务 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->auth('12345 ...
- LGP6008题解
题意有点儿绕? 容易发现,题意相当于在说,如果某一格有水,那么 ban 掉上一行后,让与其连同的所有格子被画上水. 所以我们从上到下枚举行,依次 ban 掉每一行,然后数连通块个数即可. 需要注意的是 ...
- 比较 Java 静态工厂方法与构造函数
1 什么是静态工厂方法 Java 静态工厂方法是在方法前加上 public static,让这个方法变为公开.静态的方法.该方法返回该类的一个实例,就好像一个工厂生产出一个产品.所以称之为静态工厂方法 ...