微前端一:技术选型

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

微前端架构具备以下几个核心价值:

1、技术栈无关
主框架不限制接入应用的技术栈,微应用具备完全自主权
2、独立开发、独立部署
微应用仓库独立,前后端可独立开发,部署完成后主框架自动完成同步更新
3、增量升级
在面对各种复杂场景时,我们通常很难对一个已经存在的系统做全量的技术栈升级或重构,而微前端是一种非常好的实施渐进式重构的手段和策略
4、独立运行时
每个微应用之间状态隔离,运行时状态不共享

微前端的几种框架

阿里-基于 single-spa 的 qiankun;

https://qiankun.umijs.org/zh/guide

京东-基于 WebComponent 的 micro-app;

https://zeroing.jd.com/docs.html#/

腾讯-基于 webcomponent 容器 + iframe 沙箱 的 无界方案;

https://wujie-micro.github.io/demo-main-vue/home

虽然我们现在用的是 qiankun ,但那是前两年调研的结果,在我写这篇文章的过程中,我突然发现,2022年腾讯开源了无界,看了下官方文档,看来无界更好些。

接下来我们来对比下这三个框架:

一、qiankun 方案
qiankun 方案是基于 single-spa 的微前端方案。

特点
1、 html entry 的方式引入子应用,相比 js entry 极大的降低了应用改造的成本;
2、完备的沙箱方案,js 沙箱做了 SnapshotSandbox、LegacySandbox、ProxySandbox 三套渐进增强方案,css 沙箱做了 strictStyleIsolation、experimentalStyleIsolation 两套适用不同场景的方案;
3、做了静态资源预加载能力;

不足
1、适配成本比较高,工程化、生命周期、静态资源路径、路由等都要做一系列的适配工作;
2、css 沙箱采用严格隔离会有各种问题,js 沙箱在某些场景下执行性能下降严重;
3、无法同时激活多个子应用,也不支持子应用保活;这个现在应该不是问题,qiankun似乎已经解决,但是我没试过,可以看官方文档如何同时激活两个微应用
4、无法支持 vite 等 esmodule 脚本运行;这也是困扰我们的一点,因为现在项目用的qiankun所以导致在升级到 Vue3.0后,无法使用 vite,而是依然用的Vue3.0 + webpack。

底层原理 js沙箱使用的是proxy进行快照然后用用 with(window){} 包裹起来 with内的window其实就是proxy.window 我们声明变量 var name = ‘小满’ 实际这个变量挂到了proxy.window 并不是真正的window
css沙箱原理 第一个就是shadowDom隔离 第二个类似于Vue的scoped [data-qiankun-426732]

二、micro-app 方案
micro-app 是基于 webcomponent + qiankun sandbox 的微前端方案。

特点
1、使用 webcomponet 加载子应用相比 single-spa 这种注册监听方案更加优雅;
2、复用经过大量项目验证过 qiankun 的沙箱机制也使得框架更加可靠;
3、组件式的 api 更加符合使用习惯,支持子应用保活;
4、降低子应用改造的成本,提供静态资源预加载能力;

不足
1、接入成本较 qiankun 有所降低,但是路由依然存在依赖; (虚拟路由已解决)
2、多应用激活后无法保持各子应用的路由状态,刷新后全部丢失; (虚拟路由已解决)
3、css 沙箱依然无法绝对的隔离,js 沙箱做全局变量查找缓存,性能有所优化;
4、支持 vite 运行,但必须使用 plugin 改造子应用,且 js 代码没办法做沙箱隔离;
5、对于不支持 webcompnent 的浏览器没有做降级处理;

底层原理 js隔离跟qiankun类似也是使用proxy + with,css隔离自定义前缀类似于scoped

三、无界方案
无界微前端方案基于 webcomponent 容器 + iframe 沙箱,能够完善的解决适配成本、样式隔离、运行性能、页面白屏、子应用通信、子应用保活、多应用激活、vite 框架支持、应用共享等用户的核心诉求。

特点
1、接入简单只需要四五行代码,很简单
2、不需要针对vite额外处理
3、预加载
4、应用保活机制

不足
1、隔离js使用一个空的iframe进行隔离
2、子应用axios需要自行适配
3、iframe沙箱的src设置了主应用的host,初始化iframe的时候需要等待iframe的location.orign从’about:blank’初始化为主应用的host,这个采用的计时器去等待的不是很优雅。

底层原理 使用shadowDom 隔离css,js使用空的iframe隔离,通讯使用的是proxy。

因为我用的是 Vue框架,所以主要从vue框架出发来看。

首先qiankun本身固有的一些缺点,不支持vite,所以有可能有这类需求的qiankun就不需要考虑了。
micro-app 和 无界我个人更倾向于 无界,毕竟2022年刚出的,功能更健全。唯一缺点可能是社区文档没那么多,出了问题,网上没那么多博客文档支持。
不过我用的是qinkun所以后面还是介绍qinkun的用法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Python编写前端时,有几种常见的技术选型可供选择。以下是一些常见的选项: 1. Django:Django是一个使用Python编写的高级Web应用程序框架。它提供了一套完整的工具和库,可用于快速开发安全且功能强大的Web应用程序。 2. Flask:Flask是一个轻量级的Python Web框架,适用于构建小型或中型的Web应用程序。它非常灵活,具有简单的API和易于扩展的特性。 3. Pyramid:Pyramid是一个通用的、高效的Python Web框架。它提供了广泛的功能和灵活性,并支持从小型应用程序到大型应用程序的无缝扩展。 4. Tornado:Tornado是一个用于构建高性能Web应用程序的Python框架。它适用于需要处理大量并发连接的应用程序,如实时聊天、实时分析和推送通知等。 5. FastAPI:FastAPI是一个现代、高性能的Web框架,基于Python 3.7+的类型提示和异步请求处理。它具有快速、易于使用和自动化文档生成等特点。 在选择合适的技术选型时,你需要考虑以下因素: - 项目规模和复杂度:对于小型项目,使用Flask或FastAPI可能更加合适。对于大型项目,Django或Pyramid可能更适合,因为它们提供了更多的功能和扩展性。 - 性能需求:如果你的应用程序需要处理大量并发连接或需要高性能,可以考虑使用Tornado或FastAPI。 - 开发人员熟悉度:选择一个开发人员熟悉的框架可以提高开发效率和质量。 - 社区支持和生态系统:选择一个有活跃社区和丰富生态系统的框架可以让你更容易找到解决方案和第三方库。 最重要的是,根据你的项目需求和团队的技术背景来选择最适合的技术选型

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值