基于混合编程的高性能视图引擎构建方法

2022-05-05 01:57李春晓陈平周伟赵强
中国教育信息化·高教职教 2022年3期

李春晓 陈平 周伟 赵强

摘   要:视图的首次响应时间和平均响应时间深刻影响着Web应用的开发效率和运行效率。文章设计了一种模板语言,通过开发翻译器分别生成动态语言和静态语言源码,实现视图在开发过程中解释动态语言执行,而发布时编译静态语言执行,并支持热部署。仿真实验结果显示:视图首次响应时间的均值减少86.47%、标准差减少51.77%。对148个视图的开发日志分析表明,文章方法能在保障软件运行效率的同时,提高软件的开发效率,具有广泛的应用前景。

关键词:混合编程;视图引擎;模板语言;Web开发;开发效率;热部署

中图分类号:TP311.52        文献标志码:A        文章编号:1673-8454(2022)03-0119-05

一、引言

MVC(Model-View-Controller)模式在Small-talk-80的GUI设计中被提出[1],其分离了数据处理、程序输入输出控制及数据表示,且描述了各层之间的通信方式,有利于构建“松耦合、高内聚”的组件, 使程序结构变得清晰而灵活[2]。多数现代编程语言都实现并开源了各自的MVC开发框架,如Java Spring、C# ASP.NET MVC、PHP Laravel等。

MVC逐渐成为Web开发的标准模式[3],并被广泛应用到各类Web项目的开发中[4-8]。以Java和C#为代表的静态语言,通过类型的强制声明,使得集成开发环境有很强的代码感知能力。对应的基于J2EE和ASP.NET的MVC框架,在实现复杂业务逻辑的管理信息系统研发中得到很大发展[9][10]。然而其视图引擎需要使用静态语言编译,会消耗大量的计算资源,首次响应时间较长,在调试和测试中消耗了大量开发者的时间。

随着移动互联网的飞速发展,各类Web应用的研发速度受到越来越多的重视。基于Python、PHP、JavaScript等动态语言的MVC框架逐渐受到业界的更多关注[11][12]。据代码托管平台(Github)统计,截至2020年5月15日,各编程语言对应的MVC开发框架获得的星数中,动态语言开发框架的星数明显多于静态语言。这是因为动态语言运行效率虽低于静态语言,但其具有可解释运行、启动速度快、首次响应时间低、开发效率较高等优点。

本文设计并实现了一种视图引擎,利用动态语言和静态语言混合编程的方法,结合动态语言和静态语言的优势,使开发过程中视图具有较低的首次响应时间,提高开发体验。软件发布后也有較低的平均响应时间,能够保障运行效率。

二、视图引擎概述

视图是应用与外界的接口,也是MVC模式中最接近用户的层,更是模型的外在表现。在Web应用中,视图引擎负责为视图创建浏览器可解析的超文本标记语言(HTML)。其通过模板与模型绑定的方式,利用母版、组件等设计,实现模板复用,提高Web应用的开发效率。

(一)视图引擎介绍

视图引擎的核心是模板语言。引擎将模板语言翻译为程序语言源代码,并由对应的编译器或解释器执行。模板语言是一种超文本标记语言与程序语言的混合体。一种MVC开发框架通常提供一种默认的视图引擎,同时也支持视图引擎的自定义。不同模板语言基于不同的程序语言与HTML混合,虽然有一定的语法差异,但是其核心结构类似[13]。

图1所示为Razor模板语言的示例,其通过“@”在HTML代码中标记C#代码,访问时将Web请求中的服务器变量全部以列表的形式显示出来。除Razor外,其他模板语言也以类似的特殊字符标记程序语言区块表示控制流程,如“{% code %}”(Jinja2)、“<{ code }>”(Smarty),以“{{ expression }}”(Jinja2)标记表达式。

视图引擎在软件研发中的主要意义有:①简化字符串的拼接,能更快速生成各类复杂格式的源代码,如实体类、增删改查(CRUD)的基本代码;②使HTML可嵌入控制流程和占位符,实现模板数据的填充工作;③具有一定的数学运算和中间值处理能力;④通过母版和组件的设计实现模板复用。

(二)视图引擎工作流程

在MVC模式中,控制器调用服务实现业务逻辑,生成业务模型和确定要加载的视图。视图引擎实现业务模型与模板的绑定,将视图绘制成HTML。首先,翻译器根据模板语言的词法规则和语法规则,通过词法分析器和语法分析器生成类或函数的源代码;然后,静态语言通过编译器将源代码编译为成可执行的机器码,或动态语言通过解释器将源代码解释为可执行的机器码;最后,将模型作为可执行代码输入,输出为最终的HTML字符串。工作流程如图2所示。

静态语言需要编译的特性将导致模板字符串到可执行代码耗时较长,可执行代码生成HTML字符串耗时较短,而生成目标HTML较快,表现为首次响应时间较长,平均响应时间较短。相应地,动态语言将导致模板字符串到可执行代码耗时较短,而可执行代码生成HTML字符串耗时较长。视图是MVC模式中变化最频繁的,用户界面的开发也需要多次预览视图的执行结果。因此,首次响应时间较长,将增加软件开发过程中调试和测试的耗时,影响开发体验。平均响应时间则是应用吞吐量的重要指标。

三、高性能视图引擎设计

本文利用动态语言和静态语言混合编程的方法,设计了一种模版语言,并分别构建动态语言和静态语言的翻译器,能在优化视图首次响应时间的同时,保证视图的平均响应时间。该引擎涉及混合编程、脚本引擎、模板翻译、缓存、热部署等关键技术。

(一)混合编程

混合编程是指使用两种或两种以上的程序设计语言来开发应用程序的过程。各类程序设计语言通常是针对某一个特定领域而设计,如用于Web开发的PHP、统计分析的R、数据处理的SQL等。而一些通用的语言,如C++、Java、Python、C#等,则通过各种类型的框架基本实现全应用场景的支持。

Python是一门结合了解释性、编译性、互动性和面向对象的脚本语言,被业界称为“胶水”语言[14]。其可以与各种语言无缝对接,也可以嵌入到其他语言中执行,本文方法采用C#与Python混合编程方法。

(二)模板翻译器

HTML是一种特殊的可扩展标记语言(XML)。通过C#语言将HTML模板语言分别翻译成Python源代码和C#源代码。在开发阶段,利用Python解释器,生成HTML;在发布后,利用C#编译器动态编译后,调用程序集生成HTML。如图3所示,上部代码为模板语言,中间代码为翻译成的Python源代码,下部代码为生成的HTML。

(三)脚本引擎

脚本引擎(Script Engine)为程序语言提供了运行过程中扩充自身功能的能力,能提高软件构建的灵活性。Java的javax.Script包中和C#中的Microsoft.Scripting类均提供了与JavaScript、Python等脚本语言交互的标准接口。

本文使用IronPython包提供的PythonEngine作为脚本引擎,实现在应用运行过程中解释Python源代码执行。将模型数据作为参数传递给根据模板翻译生成的函数,可实现模板的热更新,即在无需重启应用的情况下更新模板,为软件开发过程中模块的测试和调试带来便利。

四、实验环境与评测

为了更好地感受和测试视图引擎的性能,本文使用開源硬件“树莓派4B”作为测试平台,搭建实验环境,对性能进行仿真测试。其主要指标包括首次响应时间和平均响应时间,同时对真实的大型管理信息系统开发日志进行分析评测。

(一)系统实验环境

“树莓派4B”是一种开源硬件平台,搭载了博通最新的BCM2711处理器,以4枚ARM A72核心,主频为1.5GHZ。本文选用其1GB内存版本为作测试平台,操作系统选用Raspbian Buster Lite。测试应用运行环境为Mono,版本号为6.8.0.105。Web服务器为Jexus,版本号为 6.2.1.12。测试的模板为AdminLTE,它是GitHub上一个开源的HTML管理后台框架。

(二)首次响应时间测试

笔者分别使用Razor引擎与本文视图引擎实现AdminLTE模板,并在开发模式运行。图4所示为经30次测试记录的首次响应时间绘制的箱线图。使用正态分布进行估计,Razor引擎首次耗时的分布为N(2887.47,30.432),本文引擎首次耗时分布为N(390.67,14.672)。Razor引擎首次运行耗时接近3秒,能明显地感觉到延时,影响了开发体验和开发效率。本文引擎首次运行耗时约减少86.47%,且标准差减少了51.77%,能提供更好的开发体验,提高开发效率。

(三)吞吐量测试

Http_load是一款基于Linux平台的Web服务器性能测试工具,用于测试Web服务器的吞吐量与负载、Web页面的性能。

分别使用1~10个并发针对AdminLTE的本文引擎动态和静态语言版本进行测试,并绘制散点图,如图5所示。测试结果显示,该模板在动态语言解释和静态语言编译后执行时,性能表现相近。这表明,在占位符填充场景,采用动态语言解释执行有较好的性能。

(四)开发日志分析

本文实现的视图引擎通过订阅模板保存事件的方法,记录了视图所有的变化历史。该方法已应用于北京师范大学研究生管理系统、研究生招生管理系统、大型考试考务管理系统的开发中[15],并记录了视图模板的变更记录[16]。

北京师范大学研究生管理系统实现了研究生学籍、培养过程和学位授予的全流程管理,是一个具有1000多个表和视图的业务复杂的管理信息系统。开发日志共记录了148个视图模板,共5970次变更,平均每个视图变更40余次。根据变更次数绘制如图6所示的直方图。图6显示,超过69.6%的视图模板变更过5次以上,有30次以上变更的视图占比达32.4%。从开发日志的统计数据可以发现,在开发过程中需要对视图进行频繁修改、调试和测试,实现复杂业务逻辑。分析结果表明,使用动态语言视图引擎对提高开发效率有帮助。

五、结语

本文基于动态语言Python和静态语言C#混合编程,设计了两种模板翻译器,并利用脚本引擎、缓存和热部署机制实现了一种高性能的视图引擎。其具有启动速度快,运行效率高,系统稳定性好的特点,并且能记录详细的开发和运行日志,保障运行效率,提高开发效率。

通过系统仿真表明,动态语言和静态语言相比,无需对源代码进行编译执行,启动速度明显较高,在占位符填充场景性能相近;在循环流程控制等方面则性能差距较明显。因此,动态语言视图引擎确实能够提供更好的开发体验,提高开发效率。而在一些流程复杂的场景下,在发布时采用静态语言翻译器构建视图引擎也是有意义的。本文视图引擎结合了动态语言和静态语言的优势,具有跨平台、高性能的特点。

参考文献:

[1]KRASNER G, POPE S. A description of the model- view-controller user interface paradigm in the smalltalk-80 system[J]. Journal of Object Oriented Programming, 1988,1(3): 26-49.

[2]刘亮,霍剑青,郭玉刚,等.基于MVC的通用型模式的设计与实现[J].中国科学技术大学学报,2010,40(6): 635-639.

[3]LEFF A, RAYFIELD J T. Web-application development using the model/view/controller design pattern[C]// In Proceedings fifth ieee international enterprise distributed object computing conference, 2011:118-127.

[4]贾顺贺,陈建飞,陈古运,等.基于MVC架构的个人健康信息管理系统设计与实现[J].计算机应用与软件,2018,35(3):43-48.

[5]肖文娟,王加胜.基于Vue和Spring Boot的校园记录管理Web App的设计与实现[J].计算机应用与软件,2020,37(4):25-30.

[6]王杰,钱旦敏,娄帅,等.基于大数据的住院医师规范化培训系统设计与实现[J].计算机应用与软件,2018,35(3):61-66.

[7]路遥,范雪松.基于多层次结构的高校教代会提案管理信息系统设计与实现[J].计算机应用与软件,2019,36(12):36-39.

[8]周伟,吴颖,徐昶,等.大型考试考务管理系统设计与实现[J].中国教育信息化,2017(7):69-71.

[9]仝茵.基于ASP.NET MVC模式的软件开发架构的研究与探讨[J].中国电子科学研究院学报,2016,11(6):599-602.

[10]张宇,王映辉,张翔南.基于Spring的MVC框架设计与实现[J].计算机工程,2010,36(4):59-62.

[11]宋尚平,李兴保.PHP模板引擎Smarty的安装配置及应用实现[J].现代教育技术,2007(9):80-82.

[12]牛作东,李捍东.基于Python與Flask工具搭建可高效开发的实用型MVC框架[J].计算机应用与软件,2019,36(7):21-25.

[13]姬一文,吴庆波,杨沙洲.一种服务器端模板引擎的改进与实现[J].计算机应用研究,2011,28(3):1077-1079.

[14]宫薇薇,齐向春,裴世廉.Python与R语言混合编程方法的研究和应用[J].计算机应用与软件,2018,35(1):28-31.

[15]周伟,张弛,徐昶.博士生招生“申请-考核”制的双向匿名评价系统研究[J].学位与研究生教育,2017(3):21-25.

[16]周伟,蔡莹,王天楠,等.基于构件的管理信息系统云开发平台研究[J].中国教育信息化,2016(7):28-32.

作者简介:

李春晓,北京师范大学信息化建设办公室信息网络中心,博士生;

陈平,北京师范大学科研院副处长、信息网络中心副主任、教授级高级工程师、硕士生导师;

周伟,北京师范大学教务部,博士生,通讯作者,邮箱:zhouwei@bnu.edu.cn;

赵强,北京师范大学教务部,博士生。

High-Performance View Engine Construction Method Based on Hybrid Programming

Chunxiao LI1, Ping CHEN1,2, Wei ZHOU3,4*, Qiang ZHAO3

(1.Center of Information & Network Tecknology, Beijing Normal University, Beijing 100875;

2.Administration for Research and Development, Beijing Normal University, Beijing 100875;

3.Provost’s office and Academic Affairs (Graduate School), Beijing Normal University, Beijing 100875;

4.National Engineering Laboratory for Cyberlearning and Intelligent Technology, Beijing Normal University, Beijing 100875)

Abstract: The first response and average response time period of the view have a profound impact on the efficiency of Web application development and operation. This paper designed a template language and developed a translator to generate source code for dynamic language and static language, respectively. Views are rendered by interpretation of dynamic language during the development process, and published by execution of static language compilation support. The simulation results indicated that the mean value of the first response time of the view reduced by 86.47%, and the standard deviation reduced by 51.77%. The analysis of the development log of 148 views indicated that this method can guarantee the operation efficiency and improve the development efficiency of software, which will have a broad application prospect.

Keywords: Bybrid programming; View engine; Template language; Web development; Development efficiency; Hot deployment

编辑:王晓明    校对:李晓萍