浅谈微前端

这篇具有很好参考价值的文章主要介绍了浅谈微前端。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文呢是我梳理的一个扫盲文,由于最近团队准备使用微前端对项目进行改造,所以我呢就先浅了解一下:
微前端到底是什么?
为什么要使用微前端?
都有哪些微前端方案?
微前端有什么不好的地方吗?
通过以上几个问题,来浅谈一下:

什么是微前端?

**概念:**微前端是指存在于浏览器中的微服务。

微前端是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将单页面前端应用由单一的单体应用转变为把多个小型前端应用聚合为一体的应用。这就意味着前端应用的拆分,拆分后的应用实现应用自治、单一职责、技术栈无关三大特性,再进行基座模式或自由组合的模式进行聚合,达到微前端的目的。

浅谈微前端

自由组组织模式指的就是:系统内部子系统之间能自行按照某种规则形成一定的结构或功能。

微前端的几个基本要素: 技术栈无关、应用隔离、独立开发。

核心:拆,合

微前端的出现背景?

在前端框架、技术、概念层出不穷,且随着前端标准的演进,前端已经具备更好的性能和开发效率,但是随之而来的是应用的复杂度更高、涉及的团队规模更广、更高的性能要求,应用复杂度已经成为阻塞业务发展的重要瓶颈。

微前端就是诞生在这日益复杂化的场景中。

为什么用微前端?

为了解决团队平台系统多且相互独立,系统体量大且页面多,开发效率低、接入成本高。

当前应用痛点:

浅谈微前端

  • 项目中的组件和功能模块会越来越多,导致整个项目的打包速度变慢;
  • 因为文件夹的数量会随着功能模块的增多而增多,查找代码会变得越来越慢;
  • 如果只改动其中一个模块的情况,需要把整个项目重新打包上线;
  • 目录层级和模块层级过深而且文件又多,定位文件会越来越慢;
  • 所有的项目都只能使用同一技术框架如:react、vue等;

微前端优势:

  • 简单、松耦合的代码库

    • 微前端架构倾向于编写和维护更小、更简单、更容易开发的项目。
    • 技术栈无关,各项目可以使用不同的技术栈。
  • 增量升级

    • 支持渐进式重构,先让新旧代码和谐共存,再逐步转化旧代码,直到整个重构完成。
  • 独立部署

    • 每一个子应用都具备独立开发,持续部署,独立运行的能力。
  • 团队自治

    • 各子项目之间不存在依赖关系,保持隔离。
    • 单一职责,每个子项目只做和自己相关的业务工作。

目前前端界的微前端技术方案

1.路由分发式

通过 http 服务器的反向代理功能,来将请求路由到对应的应用上。

从A到B的时候,需要刷新页面。

适用场景:

  • 不同技术栈之间差异比较大,难以兼容、迁移、改造
  • 项目不想花费大量的时间在这个系统的改造上
  • 现有的系统在未来会被取代
  • 系统功能已经很完善,基本不会有新需求
2.iframe

iframe 最大的特性就是提供了浏览器原生的硬隔离方案,不论是样式隔离、js 隔离这类问题统统都能被完美解决。但他的最大问题也在于他的隔离性无法被突破,导致应用间上下文无法被共享,随之带来的开发体验、产品体验的问题。

  • 使用iframe 会大幅增加内存和计算资源,因为 iframe 内所承载的页面需要一个全新并且完整的文档环境,iframe 与上层应用并非同一个文档上下文导致

  • 事件无法冒泡顶层,针对整个应用统一处理时效事件冒泡不穿透到主文档树上,焦点在子应用时,事件无法传递上一个文档流

  • 跳转路径无法与上层文档同步,刷新丢失路由状态

  • iframe 内元素会被限制在文档树中,视窗宽高限制问题

  • iframe 登录态无法共享,子应用需要重新登录

  • iframe 应用加载失败,内容发生错误主应用无法感知

  • 难以计算出 iframe 作为页面一部分时的性能情况

  • 无法预加载缓存 iframe 内容

  • 事件通信繁琐且限制多

3.single-spa

类比我们的自由组织模式,Single-spa基座模式把路由管控部分从nginx搬到了我们前端,通过网页地址首先我们加载到的是基座, 子应用在基座上进行注册,每个子应用都应该有一套用来描述自己的标签,基座通过路由去匹配对应的子应用,并对子应用们进行统一管理,最后将正确的子应用内容挂在到页面上。

浅谈微前端

4.飞冰

飞冰是一个面向大型系统的微前端解决方案,它可以保证一个系统的操作体验基础上,实现各个微应用的独立开发和发版,通过 icestark 管理微应用的注册和渲染,正整个系统彻底解耦。(这是我们的候选之一)

https://ice.work/docs/icestark/about

5.qiankun

qiankun 是一个 single-spa 的微前端实现库,增加了 css 和 js 隔离(沙箱),预加载等特性。qiankun 的设计理念一个是简单,另一个就是解耦/技术栈无关。

https://qiankun.umijs.org/zh

区别:

飞冰:

  • git:星星数 943;
  • js 隔离:沙箱;
  • 样式隔离:使用 CSS Modules 方案管理样式;(正常尝试使用 Shadow Dom 的方案)
  • 打包相关:强制依赖 ice.js,及应用只能使用 react,打包也要使用ice.js 框架打包;
  • 更新周期:1周 ~ 一个月;

Qiankun:

  • git:星星数 7.8k;
  • js 隔离:沙箱;
  • 样式隔离:Shadow Dom;
  • 打包相关:依赖于 qiankun,官方推荐使用 parcel 打包,但是可以使用 webpack;
  • 更新周期:1天 ~ 一周;

single-spa和qiankun相较于iframe,具有更快的速度、没有JS隔离、刷新时能保持url状态和能使用浏览器的前进后退按钮的优势,体验上更好。而qiankun相较于single-spa,有易集成、css隔离、js沙箱隔离、预加载等优势,而且由蚂蚁金服的团队维护,文档可读性、维护积极性和框架可靠性都有保障。

微前端的原理

浅谈微前端

路由劫持Proxy解决的问题:

  • 应用间跳转: pushState/popState/replaceState/hashChange
  • 应用内跳转: history

加载渲染:除了挂载之外,还要关心卸载逻辑。以避免应用污染

如果我们要做只需要在主系统构造一个足够轻量的基座,然后让各子应用按照共同的协议去实现即可。这个协议可以包括,主应用应该如何加载子应用,以及子应用如何被主应用感知、调度,应用之间如何通信等。这个协议不应该包括,子应用要如何确保隔离性、安全性,也就是子应用除了实现一些较为简单的协议之外,跟开发一个正常的 spa 应用应该没有任何差别,包括不应该有 开发、构建、发布 等流程上的侵入。只要子应用实现了这几个协议,其他的东西怎么玩,我们都不需要关心或干预。

微前端存在的问题:

拆分粒度越小,便意味着架构变得复杂、维护成本高。

技术栈一旦多样话,便意味着技术栈混乱

开发体验不是很友好,开发时可能需要同时启多个项目。文章来源地址https://www.toymoban.com/news/detail-486713.html

到了这里,关于浅谈微前端的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端浏览器缓存知识梳理,前端工程师面试题目和答案

    所谓浏览器缓存其实就是指在本地使用的计算机中开辟一个内存区,同时也开辟一个硬盘区作为数据传输的缓冲区,然后用这个缓冲区来暂时保存用户以前访问过的信息。 浏览器缓存过程:  强缓存,协商缓存。 浏览器缓存位置一般分为四类:  Service Worker–Memory Cache–Di

    2024年04月15日
    浏览(52)
  • 尚融宝13-后台管理系统前端架构梳理

    目录 一、程序入口 (一)入口页面 index.html (二) 入口js脚本:src/main.js (三)顶层组件:src/App.vue (四)路由:src/router/index.js  查看源代码 这正是srb-admin/public/index.html    我们进入积分等级列表,查看源代码会发现仍然是index.html中的代码  那么它是怎么实现页面的不同

    2023年04月11日
    浏览(40)
  • 帮你梳理了一份前端知识架构图

    在上一篇文章中,我们简要地总结了前端的学习路径与方法,我们提到的第一个学习方法就是:建立知识框架。那么,今天我们就一起来列一份前端的知识框架图。 在开始列框架之前,我想先来谈谈我们的目标。实际上,我们在网上可以找到很多参考资料,比如 MDN 这样的参

    2024年02月07日
    浏览(44)
  • 【前端必备技能java之若依框架认证(登录注册)模块梳理】

    必备技能java系列梳理的文章并不涉及造轮子,以若依框架为基础,分析微服务Spring Cloud的能力,并理清微服务在业务处理上搭建的应用层架构,不会追问技术实践的底层细节,目标是可以让有后端经验的非java相关的程序员可以使用Spring Cloud搭建属于自己的后端服务 上面的结

    2024年03月12日
    浏览(46)
  • [WinError 10038] 在一个非套接字上尝试了一个操作,这是许多编程人员经常遇到的错误之一。本文将解释什么是套接字,为什么会出现 WinError 1...

    [WinError 10038] 在一个非套接字上尝试了一个操作,这是许多编程人员经常遇到的错误之一。本文将解释什么是套接字,为什么会出现 WinError 10038 错误以及如何解决该错误。 在计算机网络编程中,套接字是一个端点,用于发送和接收网络数据。它可以是客户端或服务器端,并与

    2024年02月16日
    浏览(59)
  • 【WEB前端进阶之路】 HTML 全路线学习知识点梳理(中)

    本文是HTML零基础学习系列的第二篇文章,点此阅读 上一篇文章。 标题是通过 h1 - h6 标签进行定义的。 h1 定义最大的标题。 h6 定义最小的标题。浏览器会自动地在标题的前后添加空行,例如: 标题用来正确的显示文章结构 ,通过不同的标题可以为文章建立索引,所以,标题

    2024年02月02日
    浏览(47)
  • web服务和前端交互相关的上中游业务技术知识点梳理

    可能之前在学校里面做的很多东西是纯后端的,不会涉及到太多和前端交互的细节,很多新手对前后端交互以及上中游业务链路的整体流程不够清晰,做一些javaWeb项目可以让我们有机会对其进行更深入的研究,最近总结了一下相关技术知识点并结合自己的实践经验来和大家分

    2024年02月21日
    浏览(44)
  • 浅谈一下前端单元测试

    关于单元测试这个概念,我想很多前端的小伙伴都知道,但是却并不一定能描述清楚。由于我开始接触单元测试还是在四个月前,当时也只是做了一些纯函数的单元测试。所以在这里只能说浅谈一下前端单元测试。 什么是单元测试? 我理解的单元测试就是用于测试一个模块

    2024年02月15日
    浏览(41)
  • 前端 之 FormData对象浅谈

    一、简介 ​ 通常情况下,前端在使用 post 请求提交数据的时候,请求都是采用 application/json 或 application/x-www-form-urlencoded 编码类型,分别是借助 JSON 字符串来传递参数或者 key=value 格式字符串(多参数通过 进行连接)来传递参数,确实足以覆盖大多数业务场景。但是在文件上

    2024年02月04日
    浏览(47)
  • 各个微前端框架的优劣浅谈

    各个微前端框架都有其独特的优势和劣势,下面我将针对几个主流的微前端框架进行简要的优劣分析: single-spa 优势 : 轻量级:single-spa是一个非常轻量级的微前端框架,它主要提供了一个加载和管理微应用的机制,使得微应用的集成变得简单。 灵活性:由于它的轻量级特性

    2024年04月13日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包