近期,全球范围内的新冠肺炎疫情有所缓解,抗击疫情有发展成为常态化的趋势,复工复学正有序展开。GWA2 吉娃兔🐇 在此期间升级改进了模板引擎系统。

这是一件令人开心的事,夙愿已久,终得实现。
大约7-8年前,当我们完成GWA2 PHP版本所有主要功能架构后,开始审视代码进行加强和优化时,就设想在模板文件的加载部分需要优化改进。 这一设想,拖来拖去,竟然有7-8年过去了。

通常情况下,GWA2专注于架构设计,遵循 MVC的设计理念,将 V(视图)的工作交给了当时选定的 Smarty模板引擎来处理。像我们在此前讨论的一样,Smarty模板引擎被选中,是有一些考虑在里面(参考:㊗️ GWA2/吉娃兔🐇八周年啦!GWA2内置模板引擎成功由Smarty替换为Hanjst , https://ufqi.com/blog/gwa2-8-... );同样地,当我们使用 Hanjst汉吉斯特替换 Smarty时,也是对这些考虑的再次审视。

重启这一问题,是因为 GWA2在准备数据和模板文件之后,在模板引擎工作之前,还有一些工作需要处理,这就是 GWA2的模板引擎子系统的预处理部分。这部分主要包括大致两方面的工作。

  1. GWA2 模板引擎子系统的两件工作
    1.1. 模板子系统之前预处理
    GWA2 在结束一次请求的业务处理之后,会根据输出变量 fmt 的具体情况来决定将要输出内容的格式,是纯文本,还是普通的HTML,还是JSON 或者 XML。
    在这一步完成后,如果需要输出HTML,在指定了待输出的模板文件之后,余下的工作将由模板引擎来跟进处理。
     .
    1.2. 设计层的静态内容替换:资源路径、关键词等
    通常的软件项目开发中,设计师和工程师,前端工程师和后台工程师,是不同的角色,由不同的人来担任。这主要是由于他们各自的工作不同。
    在网络应用中,特别是网页应用中,视图通常是普通的HTML,当前端工程师将HTML准备好之后,相应的HTML文件被添加到项目代码库中。

    只是这样的HTML原文件还不能直接使用。主要原因包括,需要需要改一些页面的头部和尾部共用的部分,这些共用的部分,需要提取出来,单独存放,以便于共用,或者实现模板的嵌套等高级功能。

    另外一项必不可少的工作是对资源路径、关键词进行替换等。原始的HTML代码可能是如下这样的情况:

    ….  
    <img src=”images/abc.png” alt=”an image”/>  
    …
    

    这里的一个图片元素,其路径是相对路径,而到服务器端真实环境时,可能相对路径就不能用了,它与用户实际访问的路径可能不在一个地方。这时候,就需要对 “images/” 进行替换操作。
    这次替换操作,是每次模板加载时都是动态替换的。
    如果没有模板缓存,则每次都需要动态替换,除非程序开发人员在拿到HTML文件时手工给修改一次。
    这是理智的,却不是实际可操作的,因为设计师和前端工程师通常需要修改HTML,每次递交到系统都来一次这样的手工替换修改,是恼人的,也是不可靠的。

    所以,多次实践之后,我们考虑还是将这部分工作交给程序和系统去做比较可靠。与之对应的,模板应该有缓存机制,这也是我们最早就注意到要优化的地方之一。
    .

    1.3. 模板文件的读取加载
    模板文件在完成动态替换后,还需要实际的实现从磁盘文件读取然后输出给客户端的过程。

    这一过程的缓存也尤为重要。如果缓存了相关页面,则每次读取时,不需要磁盘操作,直接从相应的内存缓存中进行读取,速度会大幅提升。额外地,有些模板引擎还能够对模板进行预编译,进而更快地提升模板引擎的处理速度。
    .

  2. GWA2兼容 Smarty模板引擎 和 Hanjst汉吉斯特模板引擎
    2.1. Hanjst汉吉斯特模板引擎
    Hanjst汉吉斯特是目前 GWA2 默认的和推荐的模板引擎。(参考: https://ufqi.com/blog/category/hanjst/ )
    Hanjst 在接管模板加载工作后,也需要需要完成上述两项工作。通过磁盘文件系统读取模板文件,进行替换资源路径操作,然后再将替换后的模板内容与要输出的环境变量内容一并输出到前端。

    在前端页面通过 JavaScript完成数据内容与模板形式的融合。
    加入模板引擎子系统的缓存后,上面的预操作(读取模板文件,替换静态内容)就可以省略,其仅在缓存失效的情况下再重新做一遍预操作的工作。当预操作完成后,进行缓存写操作,以便接下来的第二次请求使用缓存内的模板形式,从而避免了读取磁盘文件内容然后进行静态内容替换等操作。
    提升了模板加载效率,也提升了系统处理速度。
    .

    2.2. Smarty模板引擎
    Smarty模板引擎即将被替换掉。在 GWA2 中,我们将在未来的版本逐渐使用 Hanjst 替换掉 Smarty . 目前 GWA2 Java的模板引擎已经升级为 Hanjst. GWA2 PHP的模板引擎还是 Smarty,预计会在未来1-2年内完成从 Smarty 到 Hanjst 的升级.

    在现有的版本中,我们也对 Smarty模板进行了一定的缓存支持升级改进。早前Smarty 本身已经具有一定的预编译与缓存操作。
    GWA2 的预操作在其之前,也即读取文件并做静态路径替换等。
    增加了这些预操作的缓存之后,GWA2的 Smarty 模板引擎子系统有望跑得更快。
    .

  3. GWA2 模板子系统缓存开关
    缓存对正式运行环境有帮助,较明显地性能提升,但对开发环境有干扰。
    也即修改不能及时提现出来,有缓存周期。有鉴于此,我们在 GWA2 中对模板缓存开启设置了两个变量开关: is_debug 和 enable_cache .

    只有 is_debug == false 并且 enable_cache == true 时,才会开启 GWA2 的模板引擎的缓存。 前者的变量是针对是否开发环境的约束,如果是开发环境,则不会开启缓存,任何在模板文件上的修改即可生效。
    只有 enable_cache == true 才能够支持模板引擎的缓存,否则无处缓存。

    因此,如果不想启用模板引擎缓存,可以任意修改这两个控制变量其中一个即可。当然,也可以在输出控制的程序里 comm/footer.inc 中直接操作 enableTplCache 变量,使之始终开或者关。

    此外,我们还单独提供了模板缓存的单独有效期变量, tplCacheExpire, 其默认取自于 GWA2 的缓存有效时长。

五月是美好的季节,在姹紫嫣红、麦浪滚滚的时光里,从更深层面近乎完美地实现了多年来的一个心愿,所谓幸福,大抵如此。对个人如此,对 GWA2 社群,应该也是福音。

已经启用模板引擎缓存系统的产品包括 有福新闻( https://ufqi.com/news/ ) | 有福常在( https://ufqi.com/news/mod.ulo... ) | 木子商城( http://www.muzimed.com ) 等。


-GWA2 是”通用网络应用架构( General Web Application Architeture )”,基于 -GWA2 可以轻便构建各种网络应用程序,
包括复杂的在线购物商城、在线医疗、在线教育、 旅游交易平台、社群或者社交网站和新闻资讯网站等,
也包括各种企事业单位网上门户,在线交互及服务作业系统等.
还可以包括为NativeApp做服务器端支持, 甚至是WebApp的全部.
-GWA2 是为数不多的支持跨开发语言的应用框架,目前支持 -Java, -PHP, -Perl, -Aspx and -Python .

-GWA2 is a “General Web Application Architecture” and based on -GWA2 developers can easily build a variety of network applications,
including complex online shopping malls, online medical services, online teaching, travel trading platforms, community or social networking sites and news information sites, etc.
Also the applications include various online portals of enterprises and institutions, online interaction and service operations systems.
Moreover it contains server-side support for NativeApp, or even all of the WebApp.
-GWA2 is one of the web frameworks which provide cross-language support for -Java, -PHP, -Perl, -Aspx and -Python at present.

**-GWA2 is E.A.S.Y
Easy Along, Swift Yield
轻松启动, 快速产出.**

https://ufqi.com/dev/gwa2/

-R/E2SS

https://ufqi.com/blog/gwa2-up...


wadelau
32 声望4 粉丝

计算技术专家.