xtemplate
Version:
eXtensible Template Engine lib on browser and nodejs. support async control, inheritance, include, logic expression, custom function and more.
62 lines (37 loc) • 4.55 kB
Markdown
# introduce xtemplate
最近随着 nodejs 的流行,各个团队都在进行着探索,其中虽然不是最优,但是最传统,最流行的架构仍然是 mvc,而 v(template) 作为选型的重要一环在前端为主的团队中受到了格外的关注。
大家或许还在迷茫,或许已经坚定得做出了选择,希望这里有机会让我给大家介绍一个 kissy 团队自主研发并得到广泛应用的前后端通用模板引擎 xtemplate(eXtensible template).
## 起源
xtemplate 首次提交在 [2012 年 9 月](https://github.com/kissyteam/kissy/commit/de15b33803530ba9fa7a4100795dea6598a043a1) ,当时由于原有的 template 模块功能太弱,
特别是扩展不便,于是决定做一款功能全面,方便扩展的前端模板引擎,之后随着 [kissy 1.3](https://github.com/kissyteam/kissy/releases/tag/v1.3.0) 的发布而得到了广泛使用,
当然有各种各样的[抱怨和反馈](https://github.com/kissyteam/kissy/search?q=xtemplate&type=Issues&utf8=%E2%9C%93),不过在大家的齐心协力下我相信大部分都得到了完善的解决。
## nodejs
时间很快就到了 2014 年,今年对于前端是一个不同寻常的年份,各个团队终于可以通过 nodejs 对后端施加实实在在的影响,而模板便作为选型的重要一环而备受关注。
在淘宝 [midway](http://node.taobao.net/) 团队中也遇到了同样的问题,虽然可以抛弃 vm 落后的语法而选择真正适合前端的语法,但要取代 vm 那么就要求这个模板引擎必须足够全面强大,
同时除了服务器端外我们还要兼顾客户端渲染,那么就要求这个模板引擎在能够无缝得应用于浏览器端和服务器端。
一直以来,淘宝浏览器端都是使用跨终端(包括 nodejs)的前端框架 kissy,自然模板引擎也是大多使用自带的 xtemplate,团队的第一个想法就是为何不将 xtemplate 应用于 nodejs 端,
于是就开始了 kissy xtemplate 的 nodejs [探索之旅](https://github.com/kissyteam/xtpl/commits?page=3),之后又是漫长的优化,
最终发现 xtemplate 特别是在服务器端的重要性已经超过了 kissy,那么为什么不能独立呢!
## 独立
8 月份以来经过仔细思考,最终决定 [xtemplate 独立出 kissy](https://github.com/kissyteam/xtemplate/commits?page=2),完全去除 kissy 的依赖,
上个星期完善了 [build 机制](https://github.com/kissyteam/xtemplate/commit/ef51f274e0e60c2413178a0c66593569ed99fc9d)后,
xtemplate 终于成为了一个独立的跨平台库: https://github.com/kissyteam/xtemplate
## 特性
xtemplate 的功能基本涵盖了业界类库的常用功能,并根据集团的实际使用情况做了不少微创新。包括对等的 vm 功能,模板继承,异步模板,灵活的扩展机制,完善的工具链支持,方便的前后端共享方案等。
性能上经过 [淘宝 v8 团队](http://gitlab.alibaba-inc.com/groups/v8) 的指点的更是不输于其他类库,
在 [midway](http://node.taobao.net/) 以及 [wormhole](http://www.atatech.org/articles/18264) 方案中得到了良好的反馈.
## 期望
最后希望大家能够对 [xtemplate](https://github.com/kissyteam/xtemplate) 项目多多关注,无论是提 bug 还是建议都十分感谢,如果能够参与使用改进就更好了,
kissy 团队随时恭候,愿景是能把 xtemplate 做成一个集团前端团队能够拿得出手的开源项目。
## 后记
YUI 已经成为了[过去时](http://yahooeng.tumblr.com/post/96098168666/important-announcement-regarding-yui),KISSY 也即将迎来第四个年份以及版本 V5,
为了避免 KISSY 重蹈 YUI 的覆辙以及未来更好得为集团服务,V5 随着 xtemplate 的独立也标志着一个新的开始,请大家拭目以待。
## xtemplate 资料
xtemplate 类库: https://github.com/kissyteam/xtemplate
api: https://github.com/kissyteam/xtemplate/blob/master/docs/api.md
语法: https://github.com/kissyteam/xtemplate/blob/master/docs/syntax.md
nodejs 端使用: https://github.com/kissyteam/xtpl
浏览器服务器共享模板方案: https://github.com/kissyteam/xtemplate/blob/master/docs/use-on-browser.md
benchmark: https://github.com/kissyteam/xtemplate/blob/master/benchmark/result/2014-08-21-benchmark.md
实现文档: https://github.com/kissyteam/xtemplate/blob/master/docs/impl.md
实现讲解 ppt: http://speakerdeck.com/yiminghe/xtemplate-internal