# tmpl.js **Repository Path**: mirrors_singod/tmpl.js ## Basic Information - **Project Name**: tmpl.js - **Description**: 微型高效javascript模板引擎 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-09-25 - **Last Updated**: 2026-06-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README **【本工具已经集成至前后端一体化MVC框架 [Codekart](https://github.com/myworld4059/Codekart),欢迎使用!】** **【框架地址:https://github.com/myworld4059/Codekart/ 】** tmpl.js ======= 微型高效javascript模板引擎 微型模板引擎 tmpl 0.3 0.1版:http://ejohn.org/blog/javascript-micro-templating/ 0.2版:http://yiheng.iteye.com/blog/1577360 **0.3 更新:** 1. 放弃低效的 with 语句从而最高提升3.5倍的执行效率 2. 使用随机内部变量防止与模板变量产生冲突 3. 放弃使用页面嵌入模板 4. 将包裹字符从<% %>变成[# #]防止与运算冲突 ###example 直接传入模板: ```javascript var str = '
    ' + '[# for (var i = 0, l = list.length; i < length; i ++) { %>' + '
  1. [#=list[i]#]
  2. ' + '[# } #]' + '
'; var obj = {name: 'demo data', list: [202, 96, 133, 134]}; //render为编译好的缓存函数 var render = tmpl(str); render(obj); render.$ //解析好的javascript中间代码 //也可以直接解析,不缓存多次使用效率低下 tmpl(str,obj); ``` ###模板内容如下: ```javascript window.tmpl = function (str, data) { var $ = '$'+(+new Date) //临时变量名,随机 防止冲突 , fn = function (data) { //解析函数 var i, variable = [o], value = [[]]; for (i in data) { variable.push(i); value.push(data[i]); } //返回解析后的字符串 return (new Function(variable, fn.$)) .apply(data, value).join(""); }; //将模板编译成js代码 fn.$ = fn.$ || $ + ".push('" + str.replace(/\\/g, "\\\\") .replace(/[\r\t\n]/g, " ") .split("[#").join("\t") .replace(/((^|#])[^\t]*)'/g, "$1\r") .replace(/\t=(.*?)#]/g, "',$1,'") .split("\t").join("');") .split("#]").join($ + ".push('") .split("\r").join("\\'") + "');return " + $; /* 如果未定义data则返回编译好的函数,使用时直接传入数据即可, 省去每次解析成函数的时间 */ return data ? fn(data) : fn; }; ``` 已经将此模板集成至Node.js开发框架[Codekart](http://codekart.jojoin.com),地址https://github.com/myworld4059/Codekart