才发现jade执行速度很坑,这两天自己写的模板引擎bmw.js
发布于 8 年前 作者 2881099 3920 次浏览 来自 分享

源码地址: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); } %}

6 回复

没benchmark没人信

@i5ting 首先,你并没有看重点,再者编译后的代码是纯js字符串连接,这也要做性能测试吗? 最后,让我觉得中国人写不出好东西,想人用就得先弄一堆认证东东

国人的悲哀..

@i5ting 哥们有空帮忙做一个,项目里有测试代码,做好贴给大家看看,谢谢

@i5ting 我遇到了一个问题,请帮忙解答下,点击我的问题给看看,谢谢

回到顶部