一个简单的HTML模板引擎

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

所以,这次我还是大致按照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 = '' +
'' +
'' +
'' +
''

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模板引擎的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2786581.html

(0)
上一篇 2025年3月8日 17:47:01
下一篇 2025年3月8日 17:47:06

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vue使用Jade模板写html

    vue 使用Jade模板写html,stylus写css 日常工作都是使用vue开发页面和webapp,写的多了就想偷懒简化各种书写方式,所以使用了jade写html,stylus写css,省了很多的步骤和提高了效率。安装包 // 安装ja…

    编程技术 2025年3月8日
    200
  • Angular组件输入ngForOf模板的方法实例

    现在,我们写一个组件puppieslistcmp,用于显示小狗狗的列表:本文主要和大家介绍了angular利用内容投射向组件输入ngforof模板的方法,希望能帮助到大家。 //puppies-list.component.ts@Compo…

    2025年3月8日 编程技术
    200
  • 如何去掉html标签的js

    本文主要和大家分享如何去掉html标签的js方法分享,希望能帮助大家学会如何去除html标签的js。 function delHtmlTag(str){return str.replace(/]+>/g,””);//去掉所有的html…

    编程技术 2025年3月8日
    200
  • vue生命周期、vue实例、模板语法

    这次给大家带来vue生命周期、vue实例、模板语法,使用vue生命周期、vue实例、模板语法的注意事项有哪些,下面就是实战案例,一起来看一下。 vue从出生到现在,从一个默默小众型的框架发展成为现在国内的三大框架之一,也从最初的版本到现在的…

    编程技术 2025年3月8日
    200
  • ES6的字符串模板详解

    这次给大家带来es6的字符串模板详解,使用es6的字符串模板的注意事项有哪些,下面就是实战案例,一起来看一下。     //ES5方式:    var text = “沧海”;    var whole = “蝴蝶再美,终究飞不过” + t…

    编程技术 2025年3月8日
    200
  • 浏览器html代码快速预览小工具

    这次给大家带来浏览器html代码快速预览小工具,使用浏览器html代码快速预览小工具注意事项有哪些,下面就是实战案例,一起来看一下。 直接弹出预览: javascript:(function() {     var blob = new B…

    2025年3月8日 编程技术
    200
  • 在HTML中用CSS实现文本截断

    这次给大家带来在html中用css实现文本截断,在html中用css实现文本截断的注意事项有哪些,下面就是实战案例,一起来看一下。 单行文本截断 注意事项 文本溢出我们经常用到的应该就是 text-overflow: ellipsis 了,…

    编程技术 2025年3月8日
    200
  • React中给div设置html

    这次给大家带来react中给div设置html,react中给div设置html的注意事项有哪些,下面就是实战案例,一起来看一下。 在使用React开发过程中,发现$(“#dataDetail”).html(&#82…

    2025年3月8日
    200
  • jquery添加带有样式的HTML标签

    这次给大家带来jquery添加带有样式的html标签,jquery添加带有样式的html标签的注意事项有哪些,下面就是实战案例,一起来看一下。 如下所示: 登录后复制     上传计划单     添加          希望实现的功能是:当…

    编程技术 2025年3月8日
    200
  • html页面中异步加载js文件方法

    一般直接引入第三方的js,如果第三方速度比较慢,会阻塞页面的渲染,用户等待的时候,会看到一片的空白,这样的用户体验不太好。因此一些不用马上运行的js,可以用异步进行加载。 加载方法有两种,如下 script 中加入 async=”async…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论