過去的幾個月裏,漢吉斯特Hanjst進行了一些升級,有功能加強,也有性能優化,爲Hanjst的生產環境部署增磚添瓦、保駕護航。爲便於後續維護和持續更新改進,茲備忘於下。前端
* 12:48 Saturday, April 27, 2019, + readable error reporting for template erros
* 19:19 Sunday, May 19, 2019, + renderTemplateRecurse for deep-in include files.
* 18:44 Friday, May 31, 2019, + allow limited support for variables in xxxelse scope, bugfix for includeScript.
* 07:58 6/2/2019, + imprvs with _appendScript to appendScript for async call.
* 16:31 Wednesday, June 5, 2019, + imprvs with parentNode=BODY
* 19:18 Monday, June 10, 2019, + bugfix for asyncScripts.
* 22:29 Thursday, June 13, 2019, + loadingLayer. 「<div id=」Hanjstloading」 style=」width: 100%; height: 100%; z-index: 99;」> Xxxx Loading… 加載中… </div>」 .
* 21:36 Thursday, June 20, 2019, + warning for MSIE browsers.jquery
Hanjst template code exec failed.編程
{「stack」:」ReferenceError: $myAds2 is not defined\n at eval (eval at renderTemplate (http://example.com/view/default/js/Hanjst.js?v=201906171103:468:15), :405:1)\n at renderTemplate (http://example.com//view/default/js/Hanjst.js?v=201906171103:468:39)\n at _callRender (http://example.com//view/default/js/Hanjst.js?v=201906171103:679:9)\n at http://example.com//view/default/js/Hanjst.js?v=201906171103:698:9\n at http://example.com//view/default/js/Hanjst.js?v=201906171103:701:3″,」message」:」$myAds2 is not defined」}瀏覽器
Line 404:性能優化
Line 405: if( $myAds2[‘sadplace’]==’homepage_up_right’){服務器
Line 406: tpl2js.push(」 <a href=\」」);app
根據這些具體到行號的錯誤提示信息,開發者能夠較快地找到出錯位置並進行修正。如上所示,代表在模板引擎進行解析時,發如今第405行有未定義的 $myAds2 這樣的變量未經初始化就開始使用,因此報錯。異步
注意!值得注意! Hanjst 全程開啓 JavaScript 的 Strict mode,不容許使用未經定義的變量!
async
隨着 Hanjst 應用場景的複雜化,多層嵌套成爲必然,有鑑於此,咱們升級改進了 Hanjst,容許無限層的模板內容嵌套。也就是父頁面能夠引入嵌套子頁面,子頁面內也能夠進一步的嵌套引入孫頁面,如此遞歸不止。
性能
{foreach $myList as $l}
//- some data
{foreachelse}
//- a warning…
{/foreach}
此次改進是在 「a warning」 部分給與有限功能的模板支持,好比容許使用變量進行替換操做等。
<!–
JavaScript codes which will be run only once after Hanjst’s work,
should be placed below here, after Hanjst, and keep in mind:
1) ‘use strict’ mode, add comma for each sentence;
2) src of Objects should be loaded in sync mode, e.g. jquery.min.js;
3) invokes with Objects should be loaded in async mode, e.g. base.js;
–>
<div id=」Hanjstloading」 style=」width:100%;height:100%;z-index:99;opacity:0.92;position:absolute;background-color:#ffffff;」> Hanjst Loading… 加載中
Hanjst loading layer默認的元素id是 Hanjstloading, 也能夠經過啓動參數:
Hanjst.LoadingLayerId = ‘myLoadingLayer’;
來指定自定義的元素Id。
Hanjst是一種基於JavaScript的模板語言及解析引擎,她運行在客戶端/服務器端。
Hanjst可以表述邏輯控制,可以實現與服務器端模塊語言相同的功能。
Hanjst當徹底在客戶端解析時,節省服務器端計算資源;
Hanjst模板語言獨立,不與服務器端資源作任何綁定;
純粹的MVC,層間數據用JSON格式傳遞;
常見模板語言功能全支持,附帶複雜而強大的JavaScript編程能力;
無學習成本,直接使用JavaScript書寫模板語言;
….
-R/s2ST