所以,这次我还是大致按照ejs的语法规范来实现leopard。
下载与使用这里是github地址,欢迎大家看完之后在issue里提建议与bug,同时也欢迎提pr。
大家也可以通过npm来下载leopard:
$ npm install leopard-template
特性目前而言,leopard实现了以下功能点:
插值:包括文本插值与html插值
逻辑判断:if与else
循环:for循环,可以用来循环输出模板
过滤器:支持在插值里加入过滤器,同时过滤器可以串联使用。引擎内置了两个过滤器,capitalize与reverse。leopard同时支持自定义过滤器,可以使用leopard.filter(filter, handler)来全局注册一个过滤器。在过滤器上,leopard可能跟ejs的不太同,跟vue的比较相似。
举个栗子var leopard = require('leopard-template')
var leo = new leopard()
var template = '<% if (isok) { %>' +
'<span class=\"nickname\"><%= nickname | capitalize %></span>' +
'<% } else { %>' +
'<span class=\"realname\"><%= realname | capitalize %></span>' +
'<% } %>'
var html = leo.compile(conditions, {
isok: false,
nickname: 'leo',
realname: 'leopard'
})
// html就是最终编译成功的的html了,可以直接通过document的方法渲染到页面上
性能其实字符串模板引擎的性能大家都知道的,在现在的硬件条件下,几乎可以说是非常快的。(饱受虚拟dom服务端渲染性能上不去的孩子哭晕在厕所,鄙人的公司项目就是卡在了这里上不了线)
我做了一个简单的benchmark,循环输出50,000个li耗时大概是在60ms左右。当然,leopard现在还只支持将模板字符串解析编译成html字符串,所以这里的循环输出指的是字符串编译这一环。
# benchmark
$ npm run benchmark
开源虽然说是个造轮子的项目,而且长得跟ejs几乎一毛一样,所以也不太可能投入到生产环境中使用(再者说现在都用mvvm框架来开发项目),但是我还是希望能按照开源项目的规范来开发leopard。我给leopard写了100%覆盖率的测试用例,每次提交commit也是跑完测试之后通过了才提交,也是希望这个项目不会太水。
# unit test
$ npm run test
# coverage
$ npm run coverage
相关推荐:
node.js模板引擎jade实例讲解
php实现模板引擎功能的简单示例
php设计模式之基于模板引擎的容器部署框架
以上就是一个简单的html模板引擎的详细内容。
