三大微前端框架,谁是你的理想型?文章主要从原理优缺点出发,深入剖析现在市面上最流行的三大的微前端框架。带领读者彻底理解

小明为公司重构了一版新的管理后台,采用了市面上最流行的SPA渲染模式,具体技术栈使用的是react+react-router。

项目第一版很快就顺利上线了,但在后续的迭代中,遇到一个棘手的问题:产品经理希望快速复用之前项目的某些页面。这让小明犯了难,因为老项目是用“上古神器”jQuery写的,完全重构成react,成本非常高。这时后端老哥丢过来一句:“你们前端用iframe嵌进来就可以了吧?”小明心里很清楚iframe有许多小毛病,但在当时,也确实没有比它更好的选择了。

小明心里其实非常清楚,这一切都是iframe带来的弊端。

市面上对微前端的定义让人眼花缭乱,比如微前端是:

这里给出我对微前端最接地气的定义:

首先,“微前端”作为近几年国内前端界最火的技术之一,目前存在多个技术流派。我按照它们对iframe看法的不同,将主流微前端方案分为了三大派系:革新派、改良派、中间派。

为了确保子应用之间样式互不影响,qiankun内置了三种样式隔离模式:

可通过strictStyleIsolation:true开启。原理是利用webComponent的shadowDOM实现。但它的问题在于隔离效果太好了,在目前的前端生态中有点水土不服,这里举两个例子。

解决方案:调整antd入参,让其在当前位置渲染。

确保子应用之间的“全局变量”不会产生冲突。

与快照沙箱思路很相似,但它不用通过Diff前后window的方式去记录变更,而是通过ES6的Proxy代理window属性的set操作来记录变更。由于不用反复遍历window,所以性能要比快照沙箱好。

以上两种沙箱机制,都只支持单例模式(同一页面只支持渲染单个子应用)。

原因是:它们都直接操作的是全局唯一的window。此时机智的你肯定想到了,假如为每个子应用都分配一个独立的“虚拟window”,当子应用操作window时,其实是在各自的“虚拟window”上操作,不就可以实现多实例共存了?事实上,qiankun确实也是这样做的。

既然是“代理”沙箱,那“代理”在这的作用是什么呢?

主要是为了实现对全局对象属性get、set的两级查找,优先使用fakeWindow,特殊情况(set命中白名单或者get到原生属性)才会改变全局真实window。

如此,qiankun就对子应用中全局变量的get、set都实现了管控与隔离。

2019年开源,是国内最早流行起来的微前端框架,在蚂蚁内外都有丰富的应用,后期维护性是可预测的。

由上可知,代理沙箱实现的关键是需要将子应用的window“替换”为fakeWindow,在这一步qiankun是通过函数window同名参数+with作用域绑定的方式,更改子应用window指向为fakeWindow,最终使用eval(...)解析运行子应用的代码。

constjsCode=`(function(window,self,globalThis){with(this){//yourcodewindow.a=1;b=2... }}).bind(window.proxy)(window.proxy,window.proxy,window.proxy);`eval(jsCode)问题就出在这个eval上,vite的构建产物如果不做特殊降级,默认打包出的就是ESModule语法的代码,使用eval解析运行会报下图这个错误。

所以这款插件的解决方案就是替换子应用代码中的静态import为动态import(),以绕过上述限制。

那DOM就不放iframe里渲染了,而是单独提取到一个webComponent里渲染,顺便用shadowDOM解决样式隔离的问题。

简单说,无界的方案就是:JS放iframe里运行,DOM放webComponent渲染。

那么问题来了:用JS操作DOM时,两者如何联系起来呢?毕竟JS默认操作的总是全局的DOM。无界在此处用了一种比较hack的方式:代理子应用中所有的DOM操作,比如将document下的getElementById、querySelector、querySelectorAll、head、body等查询类api全部代理到webComponent。

下图是子应用真实运行时的例子:

至于多实例模式,就更容易理解了。给每个子应用都分配一套iframe+webComponent的组合,就可以实现相互之间的隔离了!

通过重写iframe实例的history.pushState和history.replaceState,将子应用的path记录到主应用地址栏的query参数上,当刷新浏览器初始化iframe时,从地址栏读到子应用的path并使用iframe的history.replaceState进行同步。

简单理解就是:将子应用路径记录在地址栏参数中。

此[issue]()至今无法在框架层面得到解决,属于iframe的原生限制。手动的解决方案:

用于js沙箱的iframe是隐藏在主应用的body下面的,相当于是常驻内存,这可能会带来额外的内存开销。

京东的大前端团队出品。

样式隔离方案与qiankun的实验方案类似,也是在运行时给子应用中所有的样式规则增加一个特殊标识来限定css作用范围。

子应用路由同步方案与wujie类似,也是通过劫持路由跳转方法,同步记录到url的query中,刷新时读取并恢复。

组件化的使用方式与wujie方案类似,这也是micro-app主打的宣传点。

最有意思的是它的沙箱方案,居然内置了两种沙箱:

开发者可以根据自身的实际情况自由选择。

整体感觉micro-app是一种偏“现实主义”的框架,它的特点就是取各家所长,最终成为了功能最丰富的微前端框架。

静态资源补全是基于父应用的,而非子应用这需要开发者自己手动解决。

主要从接入成本、功能稳定性、长期维护性三方面来衡量:

看你的团队最看重哪一点,针对性去选择就好了,没有十全十美微前端框架,只有适合自己的。

THE END
1.WEB前端三大主流框架深入解析WEB前端三大主流框架:React、Vue与Angular 一、框架概述与特点 在Web前端开发中,React、Vue和Angular被誉为三大主流框架。它们各自具有独特的特点和优势,为开发者提供了丰富的工具和抽象,使得构建复杂的Web应用变得更加容易。下面,我们将分别介绍这三个框架的基本概念、起源、核心特点和适用场景。 https://blog.csdn.net/qq_57737836/article/details/139605447
2.高效开发利器:前端框架入门指南–梦博客高效开发利器:前端框架入门指南 在如今的互联网时代,前端开发越来越受到重视。随着技术的不断发展,前端开发中的框架也不断涌现出来,帮助开发者提升开发效率,提供更好的用户体验。本文将为您介绍前端框架的入门指南,帮助您选择适合自己的框架,从而高效开发。https://www.mengblog.cn/1572.html
3.ASP.NETCore基础知识前端开发Angular是一种流行的前端框架,具有许多特点,这些特点有助于构建现代化、可维护且高性能的Web应用程序。以下是Angular的一些主要特点: 双向数据绑定:Angular提供了强大的双向数据绑定机制,允许视图和模型之间的自动同步。当模型数据发生变化时,视图会自动更新,反之亦然,简化了数据管理和操作。 http://www.wjks.cn/news/88592.html
4.2024年,前端岗最全面试攻略,吃透15个技术栈Offer拿到手软我分享的这份春招 Web前端开发面试总结包含了 JavaScript、CSS、ES6、Vue2、vue3、React、Node.JS、小程序、HTTP、Typescript、Webpack、Git、Linux、算法与数据结构、设计模式等 15 个专题技术点,都是小编在各个大厂总结出来的面试真题,已经有很多粉丝靠这份 PDF 拿下众多大厂的 offer,今天在这里总结分享给到大家!https://zhuanlan.zhihu.com/p/677917087
5.Web前端三大主流框架是什么?初学者了解一下吧Web前端三大主流框架是什么?初学者了解一下吧 近几年以来、IT行业发展火热、衍生了很多新职业、Web前端工程师也是其中之一。那么你知道Web前端的三大主流框架是什么呢? Web前端三大主流框架是什么 React: 1.声明式设计:React采用声明范式,可以轻松描述应用。https://cloud.tencent.com/developer/article/1879837
6.web前端三大主流框架有哪些用户体验是网站、Web应用程序非常重要的部分,再强大的特性和功能,如果没有良好的用户体验,那也只能是个摆设,而实现这一体验就需要使用前端框架来简化交互式、以用户为中心的网站的开发。 天健世纪科技特此汇集了三大用于 Web 应用程序开发的主流前端框架,使用这些框架,您可以构建现代的、用户驱动的网站和 Web 应用程序https://www.sctjsj.com/go-a806.htm
7.web前端三大主流框架那个适合前端开发?上面就是关于web前端三大主流框架的介绍,你更喜欢那个? 我代码0基础可以参加传智播客的web前端培训课程吗? 前端的业务逻辑和入门相对于后端来说比较简单,对于无代码基础的学员来说入门更容易。不管你是想转行还是想通过自己的努力拿到高薪, 前端移动与开发都是非常好的选择。针对学员的基础情况,我们会将学员分为基础https://www.itcast.cn/news/20190415/08485995308.shtml
8.web前端开发的三大主流框架是什么?web前端开发框架在前端开发的好处是很显然易见的,比如可以减少代码中的bug,可以大大节约时间跟人力成本,缩短开发周期。目前web前端开发有三大主流框架分别是:Angular、React和Vue。接下来,我们一起来学习这三大框架吧。 1、web前端开发框架之Angular Angular诞生于2009年,是web前端三大注意框架中最完善的,包含了慕课、数据https://m.w3cschool.cn/article/8122821.html
9.Web前端开发:三大主流框架网站源码资源分享Web前端开发:三大主流框架 原副标题:Web后端合作开发:三大非主流架构 一、Angular Angular 起初是由 Google 技师 Misko Hevery 建立的,他在 Google 外部合作开发了这个架构,并在 2010 年向正式发布第三版。 随著天数的流逝,Angular 的产业发展愈来愈受 Google 公司的倚重,后被其全面收购,成为了 Google 非官方的http://www.bpvips.cn/web%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91%EF%BC%9A%E4%B8%89%E5%A4%A7%E4%B8%BB%E6%B5%81%E6%A1%86%E6%9E%B6.html
10.六款流行Web大前端框架以及特性六款流行Web大前端框架以及特性 在前端开发工作中,会给人感觉就是,相对于后端来讲,前端的发展感觉越来越复杂,总是出现新的方法、新的工具来解决问题,让前端开发人员很难在技术上得到积累,需要不断迭代个人技术。这个复杂不是说工作本身变得复杂,而是知识点变得越来越多,运用到的技术越来越先进。https://www.51cto.com/article/714807.html
11.前端三大主流框架和主流UI库前端三大主流框架和主流UI库 前端主流框架: React 1.声明式设计:React采用声明范式,可以轻松描述应用。 2.高效:React通过对DOM的模拟,最大限度地减少与DOM的交互。 3.灵活:React可以与已知的库或框架很好地配合 优点: 1.速度快:在UI渲染过程中,React通过在虚拟DOM中的微操作来实现对实际DOM的局部更新。http://54xdj.com/BlogsHome/Detail?id=647
12.WEB三大主流框架之React简介:WEB三大主流框架之React React 是一个用于构建用户界面的开源JavaScript库,由Facebook开发并维护。它专注于构建单页应用程序(SPA)和移动应用程序的用户界面。React 以其组件化架构、虚拟DOM和声明式编程范式而闻名,这些特点使得它在开发大型和复杂的前端应用时非常高效。 http://yjs.dawuzhe.cn/?article/1564510
13.探索Web前端开发,哪些主流框架值得推荐?除了上述三大主流框架外,还有其他一些值得关注的前端框架,如Svelte、Ember.js等,这些框架各有其独特的设计理念和适用场景,开发者可以根据项目需求和个人偏好进行选择。 相关问题与解答 1、问题一:如何选择合适的Web前端框架? 答案:选择合适的前端框架应考虑项目规模和复杂性、团队经验、开发速度和维护性以及社区和生态等https://www.kdun.com/ask/1140311.html
14.web3前端最佳实践指南登链社区区块链技术社区众所周知,目前前端开发有三大主流框架: React Vue Angular 在Web2中,这三个框架都或多或少的被使用,尤其是Vue,在国内前端开发者中更为受欢迎。 然而,在Web3领域,React算是一家独大。无论是去中心化应用(dApps)、生态项目的官网,还是区块链浏览器,React都是开发者的首选框架。可以说,超过 90% 的区块链项目https://learnblockchain.cn/article/8286
15.前端三大主流框架的区别(一)江咏之前端三大主流框架的区别(一) React与Vue 相同点 1、使用 Virtual DOM,有较高的运行速度 2、提供组件化功能 3、可使用mobx与vuex进行状态管理,响应式、依赖追踪 React 1、子组件重复渲染问题需要手动优化 2、可以使用redux进行状态管理,函数式、不可变、模式化,时间旅行https://www.cnblogs.com/jiangwenxin/p/13640758.html
16.后端搭建框架(后端三种主流框架)前端框架有:Bootstrap框架;Foundation框架;Angular框架;React框架;VueJS框架;Node.Js。 常用的前端框架有Bootstrap框架、React框架、Vue框架、Angular框架、Foundation框架等等现在越来越多的前端框架开始出现,这为我们的项目需求带来了极大的方便。 web前端三大主流框架都是Angular、React、Vue。 https://www.eolink.com/news/post/87976.html