过去的几个月里,汉吉斯特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