Hello 2019! Hanjst/汉吉斯特 模板语言及引擎创新发布

Hello 2019!  Hanjst/汉吉斯特 模板语言及引擎创新发布。git

值此一元复始之际,恭祝 网友们新年万事如意!
寄望 Hanjst/汉吉斯特能帮助你们从各类模板中解脱出来,为人类作出更大的贡献。github

1. 背景

网页模板语言/引擎缘起于 MVC 思想的引入。当软件项目膨胀复杂到足够大时,软件研发人员与UI/UE设计人员就须要分别独立出来,其中设计制做人员工做的V(View)部分须要用模板语言与引擎。编程

模板语言及引擎的设计与研发工做是一项既简单又复杂的工做。简单地说,模板就是一种变量替换的工做,在模板中预留相应的占位符和变量标记,模板引擎在工做时在相应的占位符将对应的变量替换为实际对应的数值便可。json

复杂地说,模板语言是一种全新表达语言的设计,设计一门语言,其难度是可想而知的,这门语言要可以知足平常沟通之须要,首先或入门的是语言设计者要考虑的,是该模板语言可以广泛接受和普遍使用,这样语言才有生命力。无疑,简洁而表意丰富是重要而优先的考虑项。浏览器

先行者已经在模板领域创制出大量符合各类需求的模板语言与模板引擎,这里是一个简单的归集  -R/U2SJ ,  为了更好的梳理其发展类别,咱们绘制了一个 Mind map:服务器

Fig1. 网页模板语言分类归纳网络

2. 问题讨论

如在Fig1中所展现的,模板语言及引擎有不少种类,每一个分类下面又有不一样的应用实例,可谓多姿多彩,琳琅满目。实际上,在网络上搜索一下可能会发现,网页模板语言和引擎多到不胜枚举,连JSP、PHP这样的开发语言均可以归类为某种模板语言的范围。less

经过脑图的分析,咱们发如今这一领域还有两个问题没有获得解决,或者没有获得很好的解决:1)服务器端,有没有一种模板语言与引擎能够实现跨开发语言的? 2)客户端/浏览器终端,有没有一种模板语言与引擎可以不须要Script tags的?函数

针对第一个问题,咱们搜索了屡次,发现的确有针对不一样开发语言而设计的模板语言与引擎,多数只是针对某几种主流语言开发了模板编译引擎,只是作到“准跨开发语言”,另外就是,这些看似高级的模板语言与引擎,大多数都是私有软件,非开源,须要购买获取受权才能使用。学习

至于第二个问题,Script tags,通常的定义是这样的,若是咱们在客户端使用JavaScript来写一个模板,一般都须要先声明一段区块头部,而后完事以后再声明一下区块尾部,这个区块的头尾部使用Script tags来实现的,以下:

<script id="template" type="x-tmpl-mustache">
Hello {{ name }}!
</script>

这是使人不悦的,为什么要表述一句 “Hello {{name}}”, 无辜地多写了第一行和第三行,不能省掉吗?

使人无可忍受地还有其余的,
3)logicless 。若是一种模板语言没法表达逻辑,这是什么逻辑?
4){{name}}。为什么必需用两个“{{” ,而不是一个“{”?
5)<#list>. 为什么要用 “<#” , 能再简洁易懂些吗?

因而,怀着这些不满意,咱们设想知足如下须要来设计一套新的模板语言与引擎:

A)跨开发语言,与服务器开发语言不作绑定,同时开源,无偿使用;
B)去掉 Scripts tags;
C)基于JavaScript提供,同时与服务器端一致强大而复杂的表达、表示能力。

如能知足以上,咱们在继续研制 -GWA2  / -吉娃兔 的道路上,有望一通各个开发语言的模板引擎,而不是在开发 Java 版本的 GWA2时 选择 Velocity, 在 开发 PHP 版本的 GWA2 时选择 Smarty 等问题。

以语言学家的视角来设计这套模板语言与引擎,
以工程师的思惟来实现语法、语义的程序化表达,
这就是 Hanjst 模板语言及引擎。

3. Hanjst, 汉吉斯特 模板语言及引擎

Hanjst是一种基于JavaScript的模板语言及解析引擎,她能够运行在客户端,也能够运行在服务器端。

Hanjst可以表述逻辑控制,可以实现与服务器端模块语言相同的功能。

特征/功能

  • Hanjst运行在客户端时彻底客户端解析,节省服务器端计算资源;

  • Hanjst模板语言独立,不与服务器端开发语言作任何绑定;

  • 纯粹的MVC,层间数据用JSON格式传递;

  • 常见模板语言功能全支持,附带复杂而强大的JavaScript编程能力;

  • 无学习成本,直接使用JavaScript书写模板语言;

  • 开源的,无偿使用;
  • ….

Han 是我妻子的姓(韩), 也是出现我女儿和儿子名字中的音节。Han 也是中文“汉族”的意思。

Hanjst 模板语言及引擎设计用来终止在HTML模板语言领域不断地“再造轮子”的活动,尽管这听起来有些怪异。

Hanjst 的语法与基于 PHP 的Smarty语言有类似的地方,缘由是咱们借鉴了 Smarty的一些设计,之因此如此,是咱们赞同 Smarty 在语言精炼方面精益求精的探索( -R/x12SU  )。

Note that the PHP syntax uses 5 punctuation characters to display a simple variable: <?=?>, whereas Smarty uses 2: {}

Hanjst 依托JavaScript内部对象及函数的功能,赋予了在模板中直接调用这些功能的能力,实现了媲美服务端模板语言一致的表示、表达能力。如表达截短一个字符串:

{$myString.substring(0, 10)} 

 

4. 发展规划及设想

Hanjst 模板语言及引擎已发布在 -GitHub 上,地址为: https://github.com/wadelau/Hanjst 。

Hanjst 模板语言及引擎的样例展现地址, -Hanjst , -R/j2SP 。 如今就能够点开尝鲜。

Hanjst 模板语言及引擎的参考手册在编辑中,不日将在线发布。

Table of Contents

I. What is Hanjst?
1.
Hanjst Installation
2.
Basic Settings
II. Hanjst for Template Designers
3.
Syntax and Semantic
4.
Variables
5.
Modifiers on Variables
6.
Built-in Functions
7.
Warnings and Errors
III. Hanjst Template for Programmers
8.
JSON Data
9.
Includes
10.
Compile and Cache
IV. Search Engine Optimization
11.
HTML Head Element
12.
Plain Content Div Element
13.
Robot-oriented Links
V. Advanced Applications for Hanjst
14.
Embedded in HTML Elements

 

5. 不足及改进

目前已知的不足之一是在客户端运行编译模板文件时,对搜索引擎不够友好。

针对这一问题,咱们提供了优化HTML head, 曝露 Hanjstjsondata 等方式进行补充。

其余的,请你们试用并反馈。

 

2019年元旦,Hanjst/汉吉斯特 正式对外公布。

 

-R/U2SK 

相关文章
相关标签/搜索