Hello 2019! Hanjst/漢吉斯特 模板語言及引擎創新發布

Hello 2019! Hanjst/漢吉斯特 模板語言及引擎創新發布。git

值此一元復始之際,恭祝 朋友們新年萬事如意!
寄望 Hanjst/漢吉斯特能幫助你們從各類模板中解脫出來,爲人類作出更大的貢獻。github

1. 背景

網頁模板語言/引擎緣起於 MVC 思想的引入。當軟件項目膨脹複雜到足夠大時,軟件研發人員與UI/UE設計人員就須要分別獨立出來,其中設計製做人員工做的V(View)部分須要用模板語言與引擎。編程

模板語言及引擎的設計與研發工做是一項既簡單又複雜的工做。簡單地說,模板就是一種變量替換的工做,在模板中預留相應的佔位符和變量標記,模板引擎在工做時在相應的佔位符將對應的變量替換爲實際對應的數值便可。json

複雜地說,模板語言是一種全新表達語言的設計,設計一門語言,其難度是可想而知的,這門語言要可以知足平常溝通之須要,首先或入門的是語言設計者要考慮的,是該模板語言可以廣泛接受和普遍使用,這樣語言纔有生命力。無疑,簡潔而表意豐富是重要而優先的考慮項。瀏覽器

先行者已經在模板領域創制出大量符合各類需求的模板語言與模板引擎,這裏是一個簡單的歸集 -R/U2SJ , 爲了更好的梳理其發展類別,咱們繪製了一個 Mind map:服務器

TemplateLanguage_Engine_forWeb.201812.png

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>. 爲什麼要用 「<#」 , 能再簡潔易懂些嗎?

tencent-template-201901.jpg
Fig2 騰訊理財通客戶端等JavaScript模版

從 Fig2 中咱們能夠看到這些使人不滿意等地方,函數等調用 | f2y | n2t 借用了命令行管道等意思,若是有參數呢?可否寫成:

f2y(n2t(IMonthProfit)) 
or
IMonthProfit.n2t().f2y()

經過Fig2 咱們還發現 模版語言,尤爲是 JavaScript 模版語言在App上應用等依然存在,模版等使用並無隨着Web向App轉換而減小。

因而,懷着這些不滿意,咱們設想知足如下須要來設計一套新的模板語言與引擎:

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/Ha...

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

相關文章
相關標籤/搜索