博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
来分享一个我自己写的HTML模板引擎,Leopard
阅读量:5826 次
发布时间:2019-06-18

本文共 1442 字,大约阅读时间需要 4 分钟。

Leopard

背景

Leopard, yet another HTML template engine!

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

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

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

下载与使用

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

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

$ npm install leopard-template

特性

目前而言,Leopard实现了以下功能点:

  • 插值:包括文本插值与HTML插值
  • 逻辑判断:ifelse
  • 循环:for循环,可以用来循环输出模板
  • 过滤器:支持在插值里加入过滤器,同时过滤器可以串联使用。引擎内置了两个过滤器,capitalizereverseLeopard同时支持自定义过滤器,可以使用Leopard.filter(filter, handler)来全局注册一个过滤器。在过滤器上,Leopard可能跟ejs的不太同,跟Vue的比较相似。

举个栗子

var Leopard = require('leopard-template')var leo = new Leopard()var template = '<% if (isOk) { %>' +  '<%= nickname | capitalize %>' +  '<% } else { %>' +  '<%= realname | capitalize %>' +  '<% } %>'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

结语

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

转载地址:http://aosdx.baihongyu.com/

你可能感兴趣的文章
路由器发布服务器
查看>>
实现跨交换机VLAN间的通信
查看>>
jquery中的data-icon和data-role
查看>>
python例子
查看>>
环境变量(总结)
查看>>
ios之UILabel
查看>>
Java基础之String,StringBuilder,StringBuffer
查看>>
1月9日学习内容整理:爬虫基本原理
查看>>
安卓中数据库的搭建与使用
查看>>
AT3908 Two Integers
查看>>
渐变色文字
查看>>
C++ 0X 新特性实例(比较常用的) (转)
查看>>
node生成自定义命令(yargs/commander)
查看>>
各种非算法模板
查看>>
如何创建Servlet
查看>>
.NET 设计规范--.NET约定、惯用法与模式-2.框架设计基础
查看>>
win7 64位+Oracle 11g 64位下使用 PL/SQL Developer 的解决办法
查看>>
BZOJ1997:[HNOI2010]PLANAR——题解
查看>>
BZOJ1014:[JSOI2008]火星人prefix——题解
查看>>
使用Unity3D引擎开发赛车游戏
查看>>