模板引擎

基于.NET的免费开源的模板引擎-

孤人 提交于 2020-11-29 23:44:15
1、VTemplate模板引擎的简介 VTemplate模板引擎也简称为VT,是基于.NET的模板引擎,它允许任何人使用简单的类似HTML语法的模板语言来引用.NET里定义的对象。当 VTemplate应用于web开发时,界面设计人员可以和程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面 的显示效果,而由程序开发人员关注业务逻辑编码。VTemplate将.NET程序代码从web页面中分离出来,这样为web站点的长期维护提供了便利, 同时也为我们在ASP.NET WebForm开发之外又提供了一种可选的方案。 VTemplate也可以作为动态文本生成工具,生成HTML、XML、邮件、程序源代码或其它文本等。 2、VTemplate模板的特色: 2.1、 VT是一种解释型的模板引擎,所以你可以随时更改你的模板代码以获得不同的输出,而不需要重新编译程序代码 2. 2、 VT支持缓存,也就是模板只需要解析一次,下次就可以直接从内存里构建您的模板对象而不需要再次解析模板代码,除非相关的模板文件已被修改。 2. 3、 VT的模板标签语法是基于HTML规范定义的元素,所以对页面设计人员来说是非常友好的。 2. 4、 VT模板支持循环、条件判断、数值表达式计算等,以方便你在模板里直接进行逻辑处理。 2. 5、 VT支持直接调用对象里的方法 例子: -----

Handlebars玩起来

余生长醉 提交于 2020-11-11 00:41:57
为什么需要模板引擎 关于前端的模板引擎,我用一个公式来解释 模板引擎 模板 + 数据 ========> html页面 模板引擎就像是html的解析生成器,将对应的模板填充完数据之后生成静态的html页面。它可以在浏览器端(比如angular中指令所用的模板)也可以在服务器端执行,不过一般用于服务器端。因为它的一个作用是抽象公共页面来重用,如果在服务端填充数据,可以减少回填数据给页面的ajax请求,从而提升浏览器端整体页面渲染速度。 初级玩家:表达式 数据: { title: 'Express', obj:{ version: 'v4.3', category: 'node', "date~": '2016' } } 模板: <p>{{title}}</p> <p>{{obj.version}}</p> <p>{{obj/category}}</p> <p>{{obj.date~}}</p> handlebars中变量都添加双花括号来表示(类似Angular),对比ejs的”<%%>”来说看起来没什么区别,其实这是很人性化的,想一下你键盘上的位置,再考虑按这几个字符的难易程度你就懂了。其中要访问变量的属性值时可以用类似json格式的”.”,也可以用”/“。 其中变量名不可包含以下字符。如果包含则不被解析,如上的”“。 空格 ! " # % & ' ( ) * + , . / ; <

基于ANTLR语法树编写解释引擎最佳实践

你说的曾经没有我的故事 提交于 2019-12-23 02:31:05
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Tiny模板引擎的实现方式原来是采用的编译方式,最近发生了一些问题,因此我觉得有必要把编译方式调整为解释方式,为此就开始了此次实现活动。 编译方式存在的问题 当时采用编译方式,主要是考虑到编译方式在运行时不必再去遍历语法树,因此就采用了编译方式。但是在实际应用当中,出现了如下问题: 文件路径冲突的问题 由于采用的是编译方式,这个时候就存在在一个选择,即:Java源代码落地或不落地的选择。如果Java文件不落地,则在有问题的时候,如果想要进行代码调试(虽然这种场景并不多见),那么就没有源代码可供调试。如果Java代码落地,则会存在一个问题,那就是资源文件在磁盘文件中产生冲突的问题。 同样的问题对于class文件也存在,如果不落地,那么每次应用重启动的时候,都要重新编译这些文件以产生class文件;如果落地,则也会产生冲突的问题。 当然,Tiny模板引擎通过增加一个配置项,解决了这个冲突的问题,但是由于增加了一个配置项,从客观上增加了维护人员的工作量,也容易造成当维护人员不了解这里面的道道,忘记设置从而导致在一台服务器中部署多个Tiny应用时多个应用中的模板文件生成的java文件和class文件的冲突,从而导致出现问题。 PermSize内存占用问题 采用编译方式的时候,由于每个模板文件都要生成一个类

如何选择Javascript模板引擎(javascript template engine)?

无人久伴 提交于 2019-12-10 17:02:49
日期:2012-9-17 来源: GBin1.com 随着前端开发的密集度越来越高,Ajax和JSON的使用越来越频繁,大家肯定免不了在前台开发中大量的使用标签,常见到的例子如下: 你的到了一个JSON对象,如下: var data={ email: 'terry.li@gbin1.com, gender: 'male' } 然后你需要将json数据组织成页面内容,如下: var email, gender; email= '<div class="mail">' + data.email+ </div>'; gender= '<div class="gender">' + data.gender + </div>'; $('#contentwrapper‘).append(content).append(gender); 代码执行功能非常简单,将json数据生成web页面中的内容,如下: <div class="mail">terry.li@gbin1.com</div> <div class="gender">Male</div> 如果只是简单代码组合可能还好一些,但是如果页面大量使用类似的结构的话,除非一直是同一个程序员维护,否则后期的管理成本会相对非常的高。 为 了解决这个问题, 我们通常会引入"javascript模板引擎概念“,提到模板,相信大家都不会陌生

高性能JavaScript模板引擎原理解析

我们两清 提交于 2019-12-10 16:43:23
本文将用最简单的示例代码描述现有的 javascript 模板引擎的原理,包括新一代 javascript 模板引擎 artTemplate 的特性实现原理,欢迎共同探讨。 artTemplate 介绍 artTemplate 是新一代 javascript 模板引擎,它采用预编译方式让性能有了质的飞跃,并且充分利用 javascript 引擎特性,使得其性能无论在前端还是后端都有极其出色的表现。在 chrome 下渲染效率测试中分别是知名引擎 Mustache 与 micro tmpl 的 25 、 32 倍。 除了性能优势外,调试功能也值得一提。模板调试器可以精确定位到引发渲染错误的模板语句,解决了编写模板过程中无法调试的痛苦,让开发变得高效,也避免了因为单个模板出错导致整个应用崩溃的情况发生。 artTemplate 这一切都在 1.7kb(gzip) 中实现! javascript 模板引擎基本原理 虽然每个引擎从模板语法、语法解析、变量赋值、字符串拼接的实现方式各有所不同,但关键的渲染原理仍然是动态执行 javascript 字符串。 关于动态执行 javascript 字符串,本文以一段模板代码举例: 这是一段非常朴素的模板写法,其中,”" 为 closeTag (逻辑语句闭合标签),若 openTag 后面紧跟 “=” 则会输出变量的内容。

一个精巧的Javascript Template引擎

£可爱£侵袭症+ 提交于 2019-12-10 16:43:08
基于MVC模式的web框架在渲染页面时,都会提供可以内嵌后端语言的模板引擎,用于使用动态数据生成页面。在某些场景下,无法使用后端的模板引擎,但又需要使用动态数据渲染页面内容,这时便可选择基于Javascript的模板引擎。 背景:之前公司有一套C/S产品线,后来为了产品的web化,在中间件上封装了一个Restful service接口,用以响应web前端的数据请求。前端只提供了供Javascript调用的数据接口,返回的数据格式为序列化的JSON。因此页面的渲染只能在前端,由Javascript调用Restful service接口获得动态数据之后才能进行。 基于这种场景,考虑寻找一个Javascript的模板引擎进行页面渲染。由于本次需求(一个网站)相对简单,因此没有选择功能强大且复杂的模板引擎,而是采用了一个极其简单的引擎。 这个模板引擎是John Resig在 几年前 写的( 这里 ),代码非常简洁。jquery之前有几个版本提供了模板引擎的功能,后来又去掉了,我没有实际用过jquery的模板功能,只搂了一眼使用方式,猜测跟这个模板引擎应该是有渊源的。John在他的书《 Secrets of the JavaScript Ninja》里也对这段代码做了介绍。下面是这个模板引擎的全部代码: /* * javascript template from John Resig *

推荐13款javascript模板引擎

℡╲_俬逩灬. 提交于 2019-12-10 16:42:13
javaScript 在生成各种页面内容时如果能结合一些模板技术,可以让逻辑和数据之间更加清晰,本文介绍 X 款 JavaScript 的模板引擎。(排名不分先后顺序) 1. Mustache 基于javascript 实现的模板引擎,类似于 Microsoft’s jQuery template plugin,但更简单易用! 2. EasyTemplate 在使用过 Freemarker 模 板后,感觉它的 语法比较朴实,平易近人,容易上手,于是决定按它的语法风格实现一个前端的 模板引擎,这就有了下面的EasyTemplate! EasyTemplate模板的函数大小为1.34k(未压缩),暂时只实现了 list,list index,if elseif else等功能,应该可以满足大部分的使用需求了。 EasyTemplate模板 引擎的解析速度测试,渲染1000行数据,在不同的浏览器中,平均速度大约在30豪秒以内(测试机器性能较弱)。 3. jSmart jSmart 是著名的 PHP 模板引擎 Smarty 的 JavaScript 移植版本。 4. Trimpath Trimpath JavaScript 是个轻量级的,基于JavaScript的,跨浏览器,采用APL/GPL开放源代码协议的,可以让你轻松进行基于模板编程方式的纯JS引擎。新浪的评论系统使用的就是此模板。

Play框架拾遗之三:模板引擎

独自空忆成欢 提交于 2019-12-10 08:57:08
1、模板语法 用表达式时,如下使用时,只有client不为null的情况下,才进行client.name的输出。 <h1>Client ${client?.name}</h1> 在应用中,模板引擎默认对所有的动态表达式进行转义,以此来避免XSS的安全问题。可以通过调用扩展方法raw(),以非转义的形式在页面中输出,如: ${title.raw()} --> <h1>Title</h1> 如果需要显示大量的非转义HTML内容,可以使用#{verbatim /}标签: #{verbatim} ${title} --> <h1>Title</h1> #{/verbatim} Play通过路由器可以(逆向)生成URL,匹配指定的路由。在模板中使用@{…}引用可以达到相同的目的: <h1>Client ${client.name}</h1> <p><a href="@{Clients.showAccounts(client.id)}">All accounts</a></p> <hr /> <a href="@{Clients.index()}">Back</a> 该实例中,@{Clients.showAccounts(client.id)}调用了Clients控制器中的showAccounts Action方法,并传递了client.id参数。 @@{…}引用的使用语法与@{…}相同

Tiny模板语言(VelocityPlus)初步入门

烂漫一生 提交于 2019-12-09 14:04:43
1 关于用户手册 本文主要介绍如何在模板中使用Tiny模板语言,通过查阅本手册,可以对Tiny模板语言 TTL(Tiny Template Language)的用法有一个较全面的认识,并学会如何有效地使用Tiny模板语言。同时,本文提供了较多的例子帮您来学习并掌握它。 2 Tiny模板语言概述 Tiny 模板语言是一个参考 Velocity 语法的模板语言,它对 Velocity 模板语言中一些功能不太完全及使用过程中比较不方便的地方进行全面的扩展和升级,同时为了更好的适应Web界面层的开发,还提供了强大的布局功能。 本文中的例子都使用Tiny 模板语言来开发。 <HTML> <BODY> Hello ${customer.Name}! <table> #for( mud : mudsOnSpecial ) #if ( customer.hasPurchased(mud) ) <tr> <td> ${flogger.getPromo( mud )} </td> </tr> #end #end </table> </BODY> </HTML> 感谢您选择Tiny模板引擎! 3 Tiny模板语言能为您做什么? 假设您是一家专门出售Mud的在线商店的页面设计人员,让我们暂且称它为“在线MUD商店”。您的业务非常繁忙,客户下了各种类型和数量的Mud订单

我的关于 Velocity 的文章在 IBM 上发表了

亡梦爱人 提交于 2019-12-05 17:39:52
编写自定义的 Velocity 指令 Velocity 是一个高效、简洁的 Java 模板引擎,而且有很好的可扩展性,这使之特别适合在 Web 项目中使用。本文通过一个实际应用例子对 Velocity 的模板语言中的指令系统进行了介绍,并演示了如何通过编写自定义的指令来扩展 Velocity 的功能。 这篇文章写了也有一两个月了,感觉最近 IBM 的文章发表效率有点低,不像以前,如果决定采用一篇文章后,一般两三个星期就可以看到,但现在就很难说了,同事的一篇cacti的文章是去年过年前提交的,到前两天才发出来。 来源: oschina 链接: https://my.oschina.net/u/12/blog/504