过早客
  • 首页
  • 节点
  • 成员
  • 广告投放
  • 登录
  • 注册

坛子里有前端么?分享一个我写的HTML模板引擎

IT技术 • Emit_Remmus • 发表于 7 年前 • 最后回复来自 Emit_Remmus • 7 年前

Leopard Build Status codecov npm

背景

Leopard, yet another HTML template engine!

本着造轮子的初衷,我花了两天时间写了一个基于字符串的HTML模板引擎,取名叫“豹”,Leopard,希望它能像豹子一样灵活敏捷。

之前使用过的模板有ejs与jade(后来改名叫pug)。前者设计得很容易上手,而且语法跟HTML比较接近。后者让人望而生畏,而且我没记错的话,jade对缩进有严格的要求,因为它是基于缩进来判断标签层级关系的,这样的设计让人编写的时候几乎是如履薄冰如写Python(我的游标卡尺呢???),所以我当时还是一直用ejs来开发的。

所以,这次我还是大致按照ejs的语法规范来实现Leopard。

下载与使用

这里是github地址,欢迎大家看完之后在issue里提建议与bug,同时也欢迎提PR。

大家也可以通过npm来下载Leopard:

特性

目前而言,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字符串*,所以这里的循环输出指的是字符串编译这一环。

开源

虽然说是个造轮子的项目,而且长得跟ejs几乎一毛一样,所以也不太可能投入到生产环境中使用(再者说现在都用MVVM框架来开发项目),但是我还是希望能按照开源项目的规范来开发Leopard。我给Leopard写了100%覆盖率的测试用例,每次提交commit也是跑完测试之后通过了才提交,也是希望这个项目不会太水。

结语

emmm...没什么好说的,提前祝大家新年大吉吧。

加入收藏 新浪微博 分享到微信 ❤赞 1732 次点击 1 人赞 2 人收藏

打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

共收到3条回复
xiaohao750 7 年前 #1 赞 0

赞,谢谢分享

gocome 7 年前 #2 赞 0

厉害了
然鹅,我更喜欢不用引号的
引号里没办法语法高亮
那些 <span> <%= %>混在一起,再加双引号反斜杠……

Emit_Remmus 楼主 7 年前 #3 赞 1

@gocome 啥引号。。。你是说现在还是只能用字符串的问题?这个后面慢慢迭代把。

请绑定手机号后,再发言,点击此处
Guozaoke.com—源自武汉的高端交流分享社区
相关主题
根据 GitHub 个人贡献图生成贪吃蛇游戏,有点意思
哪个ai可以结合新闻中的图片和视频帮忙生成指定尺寸的组合图片呀?
做了个世界有趣街景网站,一刷就上瘾
小程序备案要多久
你们现在写游戏,还用unity吗?
感觉chatgpt还是比deepseek和grok强很多
能纯手搓一个全流程神经网络程序,在本版什么水平?
AI还是欠火候
新上线的flux 站点
有没有大佬解下惑,现在大火的AI智能体到底是个啥?

过早客微信公众号:guozaoke • 过早客新浪微博:@过早客 • 广告投放合作微信:fullygroup50 鄂ICP备2021016276号-2 • 鄂公网安备42018502001446号