你需要了解的几种微前端解决方案

 文章将讲述业界各大知名IT企业使用的微前端解决方案,以及其带来的利弊之处,因为那些弊端,使得我们团队自己探究了一套目前认为最好的微前端解决方案。通过本文,可以快速帮您理清楚微前端方案的利弊,从而做出有利于您团队的更好更明智的选择。

成都创新互联公司主要从事做网站、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务海城,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

一、写在前面

在之前的文章中,我们已经深入剖析了 微前端究竟是什么,可以带来什么收益 ,现在让我们复习一下微前端的概念:

 
 
 
  1. Techniques, strategies and recipes for building a modern web app with multiple teams that can ship features independently. 

中文释义:

可以由多个团队独立开发的现代web应用程序的技术、策略和方案。

本文则是在此基础上对现有的微前端解决方案进行对比总结,废话少说,让我们开始今天的课题。

二、现有微前端解决方案

查找了大量的资料后,我总结了以下主流的能够真正实现微前端概念的解决方案,如有遗漏,欢迎小伙伴们补充~

1、iframe

众所周知, iframe 是 html 提供的标签, 能加载其他web应用的内容 ,并且它能兼容所有的浏览器,因此,你可以用它来 加载任何你想要加载的web应用 

iframe最大的特性就是提供了浏览器原生的硬隔离方案,不论是样式隔离、js 隔离这类问题统统都能被完美解决。读到这时,相信小伙伴们跟我一样,觉得iframe与微前端概念中提到的 独立开发 、 独立维护 、 相互隔离 非常的吻合,有种直接上ifame就完事儿了的想法,但为何它到现在也不是微前端主要的实现方式呢,后来有幸拜读了 qiankun技术圆桌 中一篇关于微前端 Why Not Iframe 的思考,总结的很到位,现复述其中的一段描述

iframe虽然基本能做到微前端所要做的所有事情,但它的最大问题也在于他的隔离性无法被突破,导致应用间上下文无法被共享,随之带来开发体验、产品体验的问题。

以下是我对该文中总结部分的总结:

  • 不是单页应用,会导致浏览器刷新 iframe url 状态丢失、后退前进按钮无法使用。

  • 弹框类的功能无法应用到整个大应用中,只能在对应的窗口内展示。

  • 由于可能应用间不是在相同的域内,主应用的 cookie 要透传到根域名都不同的子应用中才能实现 免登录 效果。

  • 每次子应用进入都是一次浏览器上下文重建、资源重新加载的过程,占用大量资源的同时也在极大地消耗资源。

  • iframe的特性导致搜索引擎无法获取到其中的内容,进而无法实现应用的 seo

我猜,以上原因便是 iframe 没能作为官方微前端方案的原因吧。

2、Web Components

或许很多小伙伴对 Web Components 不是很了解,它是由 google 推出的浏览器的原生组件, MDN 对 Web Components 的定义是这样的:

作为开发者,我们都知道尽可能多的重用代码是一个好主意。这对于自定义标记结构来说通常不是那么容易 — 想想复杂的HTML(以及相关的样式和脚本),有时您不得不写代码来呈现自定义UI控件,并且如果您不小心的话,多次使用它们会使您的页面变得一团糟。

Web Components旨在解决这些问题 — 它由三项主要技术组成,它们可以一起使用来创建封装功能的定制元素,可以在你喜欢的任何地方重用,不必担心代码冲突。

它的 三项主要技术 是指:

  • Custom elements(自定义元素):一组JavaScript API,允许您定义custom elements及其行为,然后可以在您的用户界面中按照需要使用它们。

  • Shadow DOM(影子DOM):一组JavaScript API,用于将封装的“影子”DOM树附加到元素(与主文档DOM分开呈现)并控制其关联的功能。通过这种方式,您可以保持元素的功能私有,这样它们就可以被脚本化和样式化,而不用担心与文档的其他部分发生冲突。

  • HTML templates(HTML模板):