五分钟技术趣谈 | 浅谈微前端

移动开发
前端即网站前台部分,运行在PC端,移动端等浏览器上展现给用户浏览的网页。随着互联网技术的发展,HTML5,CSS3,前端框架的应用,跨平台响应式网页设计能够适应各种屏幕分辨率,合适的动效设计,给用户带来极高的用户体验。随着时间的推移,前端往往会越来越臃肿,随着技术栈的更新、UI的多元化、定制化的需求开发以及更多的不可预知的原因使得项目越来越难维护。因此,微前端概念横空出世。

Part 01  什么是微前端  

微前端是一种多个团队通过独立发布功能的方式来共同构建现代化web应用的技术手段及方法策略。

微前端借鉴了微服务的架构理念,将一个庞大的前端应用拆分为多个独立灵活的小型应用,每个应用都可以独立开发、独立运行、独立部署,再将这些小型应用联合为一个完整的应用。微前端既可以将多个项目融合为一,又可以减少项目之间的耦合,提升项目扩展性,相比一整块的前端仓库,微前端架构下的前端仓库倾向于更小更灵活。微前端的架构如下:

图片

Part 02  特性  

- 技术栈无关

主框架不限制接入应用的技术栈,子应用可自主选择技术栈。

- 独立开发/部署

各个团队之间仓库独立,单独部署,互不依赖。

- 增量升级

当一个应用庞大之后,技术升级或重构相当麻烦,而微应用具备渐进式升级的特性。

- 独立运行时

微应用之间运行时互不依赖,有独立的状态管理。

- 提升效率

应用越庞大,越难以维护,协作效率越低下。微应用可以很好拆分,提升效率。

Part 03  目前可用的微前端方案 

微前端的方案目前有以下几种类型:

  • 基于iframe完全隔离的方案

作为前端开发,我们对iframe已经非常熟悉了,在一个应用中可以独立运行另一个应用。它具有显著的优点:

1.非常简单,无需任何改造;

2.完美隔离,JS、CSS都是独立的运行环境;

3.不限制使用,页面上可以放多个iframe来组合业务。

当然,缺点也非常突出:

1.无法保持路由状态,刷新后路由状态就丢失;

2.完全的隔离导致与子应用的交互变得极其困难,只能采用postMessage方式;

3.iframe中的弹窗无法突破其本身;

4.整个应用全量资源加载,加载太慢;

这些显著的缺点也催生了其他方案的产生。

  • 基于single-spa路由劫持方案

single-spa是社区公认的主流方案,可以基于它做二次开发。

通过劫持路由的方式来做子应用之间的切换,但接入方式需要融合自身的路由,有一定的局限性。

  • 阿里qiankun

qiankun对single-spa做了一层封装。主要解决了single-spa的一些痛点和不足。通过import-html-entry包解析HTML获取资源路径,然后对资源进行解析、加载。

qiankun可以用于任意js框架,微应用接入像嵌入一个iframe系统一样简单。qiankun@2.0将跳出route-based的微前端场景。

- 优点

1.阿里团队开发维护,文档多。

2.基于single-spa封装,提供了更加开箱即用的API。

3.HTML Entry接入方式,让你接入微应用像使用iframe一样简单。

4.样式隔离,确保微应用之间样式互相不干扰。

5.JS沙箱,确保微应用之间全局变量/事件不冲突。

6.资源预加载,在浏览器空闲时间预加载未打开的微应用资源,加速微应用打开速度。

7.umi插件,提供了@umijs/plugin-qiankun供umi应用一键切换成微前端架构系统。

8.兼容IE11。

- 缺点

1.上线部署文档较少。

2.qiankun只能解决子项目之间的样式相互污染,不能解决子项目的样式污染主项目的样式。

  • 京东micro-app方案

京东micro-app并没有沿袭single-spa的思路,而是借鉴了WebComponent思想,通过CustomElement结合自定义的ShadowDom,将微前端封装成一个webComponents组件,从而实现微前端的组件化渲染。

Part 04、微前端实践  

以qiankun为例,构建一个微前端。

👉 主应用(vue)

1、安装qiankun

图片

2、修改 main.js

图片

3、router页面配置加载微应用

修改主应用router.js

图片

在About.vue文件中加入

图片

图片

4、如果在vue-admin模板中使用qiankun,需要注意的是:<div id="container"></div> 不能写在页面中,只能写在Appmain.vue 中,路由需要配置重定向。

图片

判断改变路由。

图片

AppMain.vue,需要判断显示的是哪个微应用,改变其id显示。

图片

微应用(vue)

1、在src目录新增public-path.js:

图片

2、main.js修改。

图片

3、打包配置修改(vue.config.js):

图片

责任编辑:庞桂玉 来源: 移动Labs
相关推荐

2023-07-23 18:47:59

Docker开源

2023-07-02 16:34:06

GPU虚拟化深度学习

2024-12-18 14:10:33

2023-09-02 20:22:42

自动化测试软件开发

2023-08-06 07:05:25

Android优化

2023-09-03 19:06:42

2023-07-16 18:49:42

HTTP网络

2023-07-02 16:17:31

VR虚拟现实

2023-07-02 16:09:57

人工智能人脸识别

2023-09-12 07:10:13

Nacos架构

2023-08-07 06:39:03

网络传输

2023-07-31 08:55:15

AI技术网络暴力

2023-08-29 06:50:01

Javamaven

2023-07-12 15:50:29

机器学习人工智能

2023-07-12 16:03:37

Android开发架构

2023-08-06 07:00:59

Openstack网络

2023-08-15 14:46:03

2023-09-17 17:51:43

Android 14

2023-07-16 18:42:18

2023-08-06 06:55:29

数字可视化物联网
点赞
收藏

51CTO技术栈公众号