APP下载

微前端技术的发展与应用

2022-11-25王燕梅

科技创新与应用 2022年6期
关键词:工程化开发者代码

张 洁,王燕梅,韩 强

(1.琼台师范学院信息科学技术学院,海南 海口 571100;2.琼台师范学院教育大数据与人工智能研究所,海南 海口 571100)

对于企业的生产和发展而言,良好的管理系统可以有效地促进企业的进一步发展,因此数据管理系统的便捷性和高效性是极其重要的。但是传统的Web 前端技术无法给予数据管理系统良好的操作性能,往往会有一些问题,例如开发过程中使用的框架单一,原有的代码因为技术更新不及时而无法直接迁移等。为了解决前端技术的不足,需要应用微前端技术将各个应用拆分为几个多应用的聚合,这样才能够让各个部分都能够独立地开发、运行,在出现问题时也能够更高效地解决。

1 微前端概念

微前端是将Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用,各个前端应用还可以独立运行、独立开发、独立部署。微前端不是单纯的前端框架或者工具,而是一套架构体系。

1.1 国内外研究现状

随着时代的发展,软件技术在不断更新,而Web 的开发模式也日渐简化,从最早的前后端的整体,到后面形成前后端分离的模式,经历了几次技术的革新。前端的MVC框架,可以有效地保存和处理数据,并且生成相关的视图;而后出现了前端的MVVM 设计模式,它能够将MVC 框架中的控制器用视图模型层进行替换,这样可以有效地将用户的界面和业务逻辑的开发区进行区分,这样对于开发者而言能够有针对性地进行业务的逻辑处理。

国外很早就开始对前后端的分离技术进行了研究,目前主要流行的是Angular.js,React.js,Vue.js 这几类框架。Angular.js 是由谷歌开发维护的,引入了MVC 开发模式,主要是在海外应用较多;React.js 由Facebook 团队开发完成,使用虚拟DOM 机制以及组件驱动的开发方式,在国内外都被广泛应用。而Vue.js 由中国软件工程师尤雨溪借鉴Angular.js 和React.js 的设计思想进行开发的,在国内各种互联网公司中都得到了广泛应用。

1.2 微前端实现框架

现在在微前端中较常应用的技术有:借助前端路由将前端应用微服务化、借助iframe 技术实现微前端、利用Web Components 技术实现微前端以及Single-spa 等自研微前端框架。第一个主要是通过路由可以将不同的业务模块分开,让其能够各自独立到自己的子应用中去,主要是通过Nginx 服务器反向代理,或者前端框架自带的Route来解决,这种方法较为简单,但是在每次不同的应用进行跳转的时候会存在弊端,即每次都要刷新页面,而这个过程中每个子应用的加载时间不一致,时间过长时整个应用会有很长的白屏时间,会严重影响用户的体验感。第二种的优势在于它提供了浏览器原生自带的硬隔离方案,这样能够让一个html 页面完全嵌入到另一个html 页面中,也能够保证子应用间的完全独立,并且它是以iframe 的方式集成到主程序中,从而保证每个模块都能应用不同的技术栈进行独立地开发,但是也会存在弊端,就是子应用间的内存变量是无法共享的,也因此导致了加载效率的下降。第三种是通过Web Components 技术整合所有模块,每个组件能够组织好自己的HTML、CSS 和JavaScript 代码,它能够允许开发者在外部封装可重用的定制化元素,按照需要用在Web 前端应用上。最后Single-spa 支持几乎大部分当前主流前端框架的启动和卸载处理,兼容目前主流的技术栈,拆分后的模块可以做到完全独立,同时能够依据具体需要来指定加载时机,提高性能,但是单纯地使用它是没办法开箱即用,需要对子应用进行较多的改造,增加了开发的复杂度。

2 微前端相关技术

2.1 微前端技术

微前端技术是在微服务技术的基础上产生的,它能够将多个子系统集成在主系统中,这样能够形成一个完整的应用,并且每一个子系统具有独立开发和运行的功能,用户可以任意访问各个子应用。微前端架构的实现是目前的主流方式,就是利用“主从”思想,整个系统包括一个主应用和多个子应用构成。其中主应用为系统的核心工程,主要负责路由控制、应用注册、应用加载、生命周期管理等。而子应用可以分别看作为多个独立的应用,每个应用可以不限制技术栈,当它们要跟主应用构成一个更大的系统时,它们需要分别注册到主应用中,当然即使脱离了主应用各个子应用也是可以单独访问的。在目前的微前端解决方案中,Singlespa 框架以及qiankun 较为常用。前者是将生命周期管理应用于整个系统,这样使得子应用可以在不刷新页面的情况下进行跳转,它的优点是几乎支持所有的JavaScript 框架,针对Vue、React 等框架都有诸如single-spa-vue、singlespa-react 的库,它也支持多种不同的构建工具。

2.2 TypeScript 编程语言

TypeScript 编程语言是JavaScript 的超集,它可以在各种浏览器上面进行运行,还可以在隔离操作上运行,而且不会存在兼容性问题,它提供的一套规范可以有效实现类型推断、对代码进行静态类型检查,并且减少了例如空处理、未定义等很多错误,而且可以利用它提前发现代码漏洞,这极大地提高了开发者的开发效率,并且它的强类型规范使得代码都非常整洁和有组织性,而且具有泛型、继承等特性。由于TypeScript 的开源性,开发者可以自由修改其源代码,同时它的框架设计很优秀,提供的API 接口很充分,给开发者带来了进一步扩展。而且通过TypeScript Compiler API,开发者可以自己实现编译器,语法检查自我定义,以及自定义输出结构等。由于编译器核心灵活的结构,开发者只需要简单地添加一些代码,就可以在IDE 中支持TypeScript 的诸多特性。而且在Type-Script 中对象声明为any 类型就忽略检查的机构,保证了它保留一些弱类型的灵活,又兼顾了强类型检查的优势。

在最近几年中,TypeScript 越来越流行,在Angular、React 以及Vue 中都充分得到了应用,而且由于Type-Script 的语法跟JavaScript 没有太大的明显区别,前端开发者可以用极低的学习成本无缝开始使用TypeScript,这使得它的使用者更多。

2.3 前端开发框架

前端开发框架中较为常用的是Angular 和React,以及vue。React 是一个用于构建用户界面的JavaScript 库。它是目前世界范围内统计使用人数最多的几大前端框架之一,目前国内的蚂蚁金服也基于React 为开发者提供了大量技术支持,例如在系统中使用的Ant Design 组件库等。而Vue.js,它是一款理念先进的前端渐进式JavaScript框架,易用、灵活并且高效,它吸收了React 数据驱动和组件化的思想,借鉴了Angular 的双向数据绑定的思想并加以改进,同时周边技术生态也极为丰富。Vue 的组件实质就是可以复用的Vue 的实例,与React 类似,可以将复杂的页面拆分为多个复用性高的、独立的小组件,并把他们嵌套聚合在一起,既提高了代码的可读性,也为开发者的维护提供了方便。组件之间需要进行数据传递时可以有多种方式,官方提供的就有props 传值、借助$emit 传值、借助eventbus 传值、使用$ref 传值、通过官方提供的Vuex 状态管理传值等多种方法,为开发者提供了极大的便利。

2.4 G6 图可视化引擎

G6 是一个非常完备的图可视化引擎,有着便捷、灵活等特点,它能够依据丰富的api,为开发者提供高定制化能力,例如图的绘制、布局、交互等可视化能力,并且也能够提供图可视化的解决方法等,而对于它的创建也极其简单,主要就是创建关系图、创建关系图的HTML 容器、数据准备、配置数据源、渲染等步骤,它是属于纯avascript库,因而可以在诸如React、Vue 和Angular 等前端框架中使用,使用较为广泛。

3 微前端的应用

3.1 前端工程化

Web 在发展的过程中业务越来越复杂,因此在前端的开发过程中运用工程化的方式可以将开发的效率和质量提高,并且能够有效降低开发的成本。前端的工程化主要包括规范化、自动化、组件化以及模块化。首先是规范化,项目开发规范的制定对于前端工程化来说十分关键,例如清晰的目录结构能够很好地提高项目的结构合理性,或者良好的代码规范可以有效地提高代码质量以及有利于团队协作开发,而且合理的前后端接口规范能有利于团队沟通,提升开发效率。其次是自动化,在项目开发过程中,如果遇到重复的操作应该尽量考虑采用合适的自动化工具来帮助开发者完成项目开发。然后是组件化,页面上所有的东西其实都可以看作一个组件。这种组件化思想也被Vue、React 和Angular 等框架借鉴,大的组件可以逐渐向下拆分,所有的组件构成一个完整的页面,每个组件的功能逐渐细化,这可以极大地提高代码的复用性并且有利于后期的维护。最后是模块化,如今模块化方案一般有ES6 规定的模块系统,以及社区指定的一些诸如CommonJs、AMD 和CMD 方案。目前ES6 的模块系统几乎已经可以完全取代之前的CommonJs 规范等方案,它也是目前的主流。

3.2 数据管理系统应用

在数据管理系统中应用微前端框架主要是因为它具有不限制技术栈、实现增量升级、具有独立性以及高容错率等优点。对于主应用而言,不限制技术栈,可以使得接入的子应用的技术栈可以采取多种框架,并且每个子应用都有自主权,这样在不同子应用的开发中都可以根据开发人员的能力特点进行合适的技术栈的选择,这样也使得开发的过程更加便捷;在增量升级的过程中,可以将遗产代码、复杂的业务场景进行简化,实现渐进式重构,能够有效地降低企业开发时间成本和经济成本;独立性是指可以独立开发、部署、运行,开发者在后期即使不用了解整个庞大的系统也可以专注在自己的业务逻辑模块,提高了开发效率;而高容错率是保证正确的应用能够正常运行的关键。

并且在数据管理系统中,可以应用微前端工程化的方式,例如可以运用webpack 打包构建工具,它在运行时会递归构建依赖关系图,其中包含应用程序需要的所有模块,将这些模块打包为一个或者多个bundle 提供给浏览器使用,并且它支持ES6 等多种模块化规范以及热替换功能(HMR),开发过程中未修改配置文件时无需重新对项目进行打包构建,节省了开发时间,极大地方便了开发者。

4 结束语

微前端技术实现了前后端分离,能够有效地降低开发的难度,提高各子应用的独立性,这样开发人员也能够依据自身的优势选择合适的框架进行程序的书写,并且能够有效地解决开发过程中使用的框架单一,原有的代码因为技术更新不及时而无法直接迁移等问题。随着时代的发展,微前端的技术也日益丰富,目前较为常用的是Singlespa 框架、Qiankun、TypeScript 编程语言、React、Vue 以及G6 等。在微前端的应用中使用工程化的方式会更加有助于项目的开发和管理,并且在数据管理系统中应用微前端技术可以不限制技术栈同时能够实现增量升级,而它的独立性以及高容错率也是其应用广泛的原因。

猜你喜欢

工程化开发者代码
世界首台高温超导高速磁浮工程化样车下线
时速620千米高速磁浮工程化样车下线
PLC软件工程化在高端工艺装备研制中的应用初探
PLC软件工程化的管理实践
神秘的代码
“85后”高学历男性成为APP开发新生主力军
一周机构净增(减)仓股前20名
重要股东二级市场增、减持明细
16%游戏开发者看好VR
近期连续上涨7天以上的股