注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

snoopyxdy的博客

https://github.com/DoubleSpout

 
 
 

日志

 
 

node.js异步模版ariestp  

2016-06-09 13:23:15|  分类: node |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
有2月没写博客,最近工作比较忙,打算花点时间补一下这2个月的工作心得,先开源一个node.js的异步模版,具体这个模版和其他模版有什么区别呢?

线上开源项目地址:

其实这个模版实现的功能很简单,可以把一些异步操作,放在模版里去执行,举个简单的例子如下:

"use strict"; const aries = require("ariestp"); const fs = require("fs"); const http = require("http"); const asyncTpl = `<%? ctx.thinking; setTimeout(function () { ctx.thinking = "1 seconde later" aries(); }, 1000); %> <%- ctx.thinking %> <%? ctx.http.get('http://www.baidu.com/', (res) => { ctx.status = res.statusCode; res.resume(); aries(); }).on('error', (e) => { ctx.status = 500; aries(); }); %> <%- ctx.status %> `; aries.compile(asyncTpl, {http:http}, (err, renderStr, isUseCache) => { if(err) return console.log(err); console.log(renderStr); });


模板语言和 ejs 类似,不过多了一个 <%?   ...    %> 这样的异步流程控制,在异步流程结束后,记得需要调用一下 aries(); 表示异步结束,继续执行模板解析。

上述代码执行结果如下:
1、模版将等待1秒钟后输出 "1 second later"
2、然后模版将请求 www.baidu.com 然后将百度的返回的status打印出来,不出以外就是打印"200"


至于为什么要做这样一个可以在模板里执行异步操作的模板引擎呢?也是公司项目的特殊需要,想要做到就是不发布代码,直接可以修改页面的展示,至于模板性能肯定是不如同步的 ejs 的,做过简单的压测,大约是ejs性能的70%左右。
  评论这张
 
阅读(239)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016