源码地址:https://github.com/2881099/bmw.js
刚写完,今天换到自己项目的时候修复了不少bug,以后会继续更新...
前言:以前用c#写过一个模板,全公司都推行,纯算法实现的,不过执行效率嘛,就比较低了.
这次我偷懒了,我是把模板翻译成原生js函数,然后使用new Function保存起来,这样第一次会稍慢,但比起jade那快得不是一点半点. 换句话说,就是模板是纯js代码字符串替换,速度能不快吗?欢迎拍砖...
------------有多快呢-------- 其他模板引擎测试效率对比贴:https://cnodejs.org/topic/50e70edfa7e6c6171a1d70fa 同样方式测试万行,开发模式运行结果:
首次执行时间:25ms (第一次编译所以慢一点) 第2次执行时间:1ms 第3次执行时间:0ms 第4次执行时间:0ms 总共完成时间:26ms
bmw.js修改模板内容不用重启程序 ---------------华丽分割线------------
bmw.js 像宝马发动机一样快的模板引擎,它是将模板翻译成js来执行生成结果的 支持交叉使用,将模板生成js代码,所以效率相当高
接入 express var bmw = require(‘bmw’); app.use(express.static(path.join(__dirname, ‘public’))); app.engine(‘html’, function (filePath, options, callback) { bmw.renderFile(filePath, options, r => { callback(null, r); }); }); app.set(‘views’, path.join(__dirname, ‘views_bmw’)); app.set(‘view engine’, ‘html’);
模板继承 {extends …/inc/layout.html} {block name} {/block} 结束标记
加载模板 {include …/inc/header.html}
循环 {for item[, index] in 数组对象表达式} {for key[, index] on 对象} {for 循环开始数值表达式, 循环结束数值表达式} {/for} 结束标记
条件判断 {if user.id === 0 || user.isadmin === true && user.point > 100} {else if user.point === 10} {else} {/if}
输出数据 {#表达式}
嵌入代码 {% for (var a = 0; a < 10; a++) { //打印数据 print(a); } %}