自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

你需要了解的幾種微前端解決方案

新聞 前端
文章將講述業(yè)界各大知名IT企業(yè)使用的微前端解決方案,以及其帶來的利弊之處,因?yàn)槟切┍锥?,使得我們團(tuán)隊(duì)自己探究了一套目前認(rèn)為最好的微前端解決方案。

 文章將講述業(yè)界各大知名IT企業(yè)使用的微前端解決方案,以及其帶來的利弊之處,因?yàn)槟切┍锥?,使得我們團(tuán)隊(duì)自己探究了一套目前認(rèn)為最好的微前端解決方案。通過本文,可以快速幫您理清楚微前端方案的利弊,從而做出有利于您團(tuán)隊(duì)的更好更明智的選擇。

一、寫在前面

在之前的文章中,我們已經(jīng)深入剖析了 微前端究竟是什么,可以帶來什么收益 ,現(xiàn)在讓我們復(fù)習(xí)一下微前端的概念:

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

中文釋義:

可以由多個(gè)團(tuán)隊(duì)獨(dú)立開發(fā)的現(xiàn)代web應(yīng)用程序的技術(shù)、策略和方案。

本文則是在此基礎(chǔ)上對(duì)現(xiàn)有的微前端解決方案進(jìn)行對(duì)比總結(jié),廢話少說,讓我們開始今天的課題。

二、現(xiàn)有微前端解決方案

查找了大量的資料后,我總結(jié)了以下主流的能夠真正實(shí)現(xiàn)微前端概念的解決方案,如有遺漏,歡迎小伙伴們補(bǔ)充~

1、iframe

眾所周知, iframe 是 html 提供的標(biāo)簽, 能加載其他web應(yīng)用的內(nèi)容 ,并且它能兼容所有的瀏覽器,因此,你可以用它來 加載任何你想要加載的web應(yīng)用 

iframe最大的特性就是提供了瀏覽器原生的硬隔離方案,不論是樣式隔離、js 隔離這類問題統(tǒng)統(tǒng)都能被完美解決。讀到這時(shí),相信小伙伴們跟我一樣,覺得iframe與微前端概念中提到的 獨(dú)立開發(fā) 、 獨(dú)立維護(hù) 、 相互隔離 非常的吻合,有種直接上ifame就完事兒了的想法,但為何它到現(xiàn)在也不是微前端主要的實(shí)現(xiàn)方式呢,后來有幸拜讀了 qiankun技術(shù)圓桌 中一篇關(guān)于微前端 Why Not Iframe 的思考,總結(jié)的很到位,現(xiàn)復(fù)述其中的一段描述

iframe雖然基本能做到微前端所要做的所有事情,但它的最大問題也在于他的隔離性無法被突破,導(dǎo)致應(yīng)用間上下文無法被共享,隨之帶來開發(fā)體驗(yàn)、產(chǎn)品體驗(yàn)的問題。

以下是我對(duì)該文中總結(jié)部分的總結(jié):

  • 不是單頁應(yīng)用,會(huì)導(dǎo)致瀏覽器刷新 iframe url 狀態(tài)丟失、后退前進(jìn)按鈕無法使用。

  • 彈框類的功能無法應(yīng)用到整個(gè)大應(yīng)用中,只能在對(duì)應(yīng)的窗口內(nèi)展示。

  • 由于可能應(yīng)用間不是在相同的域內(nèi),主應(yīng)用的 cookie 要透傳到根域名都不同的子應(yīng)用中才能實(shí)現(xiàn) 免登錄 效果。

  • 每次子應(yīng)用進(jìn)入都是一次瀏覽器上下文重建、資源重新加載的過程,占用大量資源的同時(shí)也在極大地消耗資源。

  • iframe的特性導(dǎo)致搜索引擎無法獲取到其中的內(nèi)容,進(jìn)而無法實(shí)現(xiàn)應(yīng)用的 seo

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

2、Web Components

或許很多小伙伴對(duì) Web Components 不是很了解,它是由 google 推出的瀏覽器的原生組件, MDN 對(duì) Web Components 的定義是這樣的:

作為開發(fā)者,我們都知道盡可能多的重用代碼是一個(gè)好主意。這對(duì)于自定義標(biāo)記結(jié)構(gòu)來說通常不是那么容易 — 想想復(fù)雜的HTML(以及相關(guān)的樣式和腳本),有時(shí)您不得不寫代碼來呈現(xiàn)自定義UI控件,并且如果您不小心的話,多次使用它們會(huì)使您的頁面變得一團(tuán)糟。

Web Components旨在解決這些問題 — 它由三項(xiàng)主要技術(shù)組成,它們可以一起使用來創(chuàng)建封裝功能的定制元素,可以在你喜歡的任何地方重用,不必?fù)?dān)心代碼沖突。

它的 三項(xiàng)主要技術(shù) 是指:

  • Custom elements(自定義元素):一組JavaScript API,允許您定義custom elements及其行為,然后可以在您的用戶界面中按照需要使用它們。

  • Shadow DOM(影子DOM):一組JavaScript API,用于將封裝的“影子”DOM樹附加到元素(與主文檔DOM分開呈現(xiàn))并控制其關(guān)聯(lián)的功能。通過這種方式,您可以保持元素的功能私有,這樣它們就可以被腳本化和樣式化,而不用擔(dān)心與文檔的其他部分發(fā)生沖突。

  • HTML templates(HTML模板): <template> 和 <slot> 元素使您可以編寫不在呈現(xiàn)頁面中顯示的標(biāo)記模板。然后它們可以作為自定義元素結(jié)構(gòu)的基礎(chǔ)被多次重用。

通過以上描述,再結(jié)合微前端的概念,我們來看看 Web Components 是如何做到微前端:

  • 技術(shù)棧無關(guān): Web Components 是瀏覽器原生組件,那即是在任何框架中都可以使用。

  • 獨(dú)立開發(fā):使用 Web Components 開發(fā)的應(yīng)用無需與其他應(yīng)用間產(chǎn)生任何關(guān)聯(lián)。

  • 應(yīng)用間隔離: Shadow DOM 的特性,各個(gè)引入的微應(yīng)用間可以達(dá)到相互隔離的效果。

綜上所述, Web Components 是有能力以組件加載的方式將微應(yīng)用整合在一起作為微前端的一種手段,但不幸的是, Web Components 是瀏覽器的新特性,所以它的兼容性不是很好,如果有兼容性要求的項(xiàng)目還是無法使用,具體請(qǐng)查看 can i use 。

3、ESM

ESM 是 ES Module 的縮寫,是 Ecma script 2015 中提出的一種前端模塊化手段,那么,它又是如何做到微前端的呢?其實(shí),微前端無外乎三大特性, 無技術(shù)棧限制 、 應(yīng)用單獨(dú)開發(fā) , 多應(yīng)用整合 ,只要抓住了這三個(gè)特性,那就不難理解 ESM 如何做的了:

  • 無技術(shù)棧限制: ESM 加載的只是js內(nèi)容,無論哪個(gè)框架,最終都要編譯成js,因此,無論哪種框架, ESM 都能加載。

  • 應(yīng)用單獨(dú)開發(fā):ESM只是js的一種規(guī)范,不會(huì)影響應(yīng)用的開發(fā)模式。

  • 多應(yīng)用整合:只要將微應(yīng)用以 ESM 的方式暴露出來,就能正常加載。

  • 遠(yuǎn)程加載模塊: ESM 能夠直接請(qǐng)求 cdn 資源,這是它與生俱來的能力。

ESM 是能做到微前端的核心思想,但是它也存在著 兼容性 這一大弊端,盡管 ESM 已經(jīng)很優(yōu)秀了,但是 大部分老版的瀏覽器 仍然無法直接使用,這也是babel等編譯工具出現(xiàn)的原因,幸運(yùn)的是,他可以通過 webpack 、 rollup 、 esbuild 、 snowpack 等編譯工具成為兼容性的代碼。

4、qiankun

在微前端界, qiankun 算得上是最早成型且知名度最廣的框架了,它是真正意義上的單頁微前端框架,那么 qiankun 到底有哪些特點(diǎn)呢,在其 官網(wǎng) 中我找到了如下概括:

  • 基于 single-spa 封裝,提供了更加開箱即用的 API

  • 技術(shù)棧無關(guān),任意技術(shù)棧的應(yīng)用均可 使用/接入,不論是 React/Vue/Angular/JQuery 還是其他等框架

  • HTML Entry 接入方式,讓你接入微應(yīng)用像使用 iframe 一樣簡單

  • 樣式隔離,確保微應(yīng)用之間樣式互相不干擾

  • JS 沙箱,確保微應(yīng)用之間 全局變量/事件 不沖突

  • 資源預(yù)加載,在瀏覽器空閑時(shí)間預(yù)加載未打開的微應(yīng)用資源,加速微應(yīng)用打開速度

  • umi 插件,提供了 @umijs/plugin-qiankun 供 umi 應(yīng)用一鍵切換成微前端架構(gòu)系統(tǒng)除了最后一點(diǎn)拓展以外,微前端想要達(dá)到的效果都已經(jīng)達(dá)到。

5、EMP

EMP是由歡聚時(shí)代業(yè)務(wù)中臺(tái)自主研發(fā)的最年輕的 單頁微前端解決方案

那么,他有哪些特性呢,下面我們一起看看:

  • 基于 Webpack5 的新特性 Module Federation 實(shí)現(xiàn),達(dá)到 第三方依賴共享,減少不必要的代碼引入 的目的,什么是Module Federation這里就不再贅述。

  • 每個(gè)微應(yīng)用獨(dú)立部署運(yùn)行,并通過cdn的方式引入主程序中,因此只需要部署一次,便可以提供給任何基于 Module Federation 的應(yīng)用使用。并且此部分代碼是遠(yuǎn)程引入,無需參與應(yīng)用的打包。

  • 動(dòng)態(tài)更新微應(yīng)用: EMP 是通過 cdn 加載微應(yīng)用,因此每個(gè)微應(yīng)用中的代碼有變動(dòng)時(shí),無需重新打包發(fā)布新的整合應(yīng)用便能加載到最新的微應(yīng)用。

  • 去中心化,每個(gè)微應(yīng)用間都可以引入其他的微應(yīng)用,無中心應(yīng)用的概念。

  • 跨技術(shù)棧組件式調(diào)用,提供了在主應(yīng)用框架中可以調(diào)用其他框架組件的能力(目前已支持互相調(diào)用的框架及使用方式請(qǐng)參閱官方文檔)。

  • 按需加載,開發(fā)者可以選擇只加載微應(yīng)用中需要的部分,而不是強(qiáng)制只能將整個(gè)應(yīng)用全部加載。

  • 應(yīng)用間通信,每一個(gè)應(yīng)用都可以進(jìn)行狀態(tài)共享,就像在使用npm模塊進(jìn)行開發(fā)一樣便捷。

  • 生成對(duì)應(yīng)技術(shù)棧模板,它能像 cerate-react-app 一樣,也能像 create-vue-app 一樣,通過指令一鍵搭建好開發(fā)環(huán)境,減少開發(fā)者的負(fù)擔(dān)。

  • 遠(yuǎn)程拉取ts聲明文件, emp-cli 中內(nèi)置了拉取遠(yuǎn)程應(yīng)用中代碼聲明文件的能力,讓使用ts開發(fā)的開發(fā)者不再為代碼報(bào)錯(cuò)而煩惱。

細(xì)心的小伙伴應(yīng)該發(fā)現(xiàn), EMP 除了具備微前端的能力外,還實(shí)現(xiàn)了跨應(yīng)用狀態(tài)共享、跨框架組件調(diào)用的能力,這是現(xiàn)有框架所不具備的優(yōu)秀特性!

三. 總結(jié)

又到了下課的最后五分鐘時(shí)間,一起來看看今天的分享都有哪些關(guān)鍵的知識(shí)需要掌握:

1. 現(xiàn)有微前端解決方案:

  • iframe

  • Web Components

  • ESM

  • qiankun

  • EMP

2. 各解決方案的利弊:

    • iframe 可以直接加載其他應(yīng)用,但無法做到單頁導(dǎo)致許多功能無法正常在主應(yīng)用中展示。

    • web Components 及 ESM 是瀏覽器提供給開發(fā)者的能力,能在單頁中實(shí)現(xiàn)微前端,不過后者需要做好代碼隔離,并且他們都是瀏覽器的新特性,都存在 兼容性 問題,微前端方面的探索也不成熟,只能作為面向未來的微前端手段。

    • qiankun 基本上可以稱為單頁版的iframe,具有 沙箱隔離 及 資源預(yù)加載 的特點(diǎn),幾乎無可挑剔。

    • EMP 作為最年輕微前端解決方案,也是吸收了許多web優(yōu)秀特性才誕生的,它在實(shí)現(xiàn)微前端的基礎(chǔ)上,擴(kuò)充了 跨應(yīng)用狀態(tài)共享 、 跨框架組件調(diào)用 、 遠(yuǎn)程拉取ts聲明文件 、 動(dòng)態(tài)更新微應(yīng)用 等能力。同時(shí),細(xì)心的小伙伴應(yīng)該已經(jīng)發(fā)現(xiàn), EMP 能做到 第三方依賴的共享 ,使代碼盡可能地重復(fù)利用,減少加載的內(nèi)容。

 

責(zé)任編輯:張燕妮 來源: code秘密花園
相關(guān)推薦

2020-10-13 06:56:19

JavaScript異常類型開發(fā)

2020-07-10 06:11:19

數(shù)據(jù)庫擴(kuò)展負(fù)載

2020-12-09 18:22:00

微前端微服務(wù)前端

2012-06-27 09:11:47

2012-06-26 10:13:55

2011-04-01 11:16:06

hessian

2020-07-10 09:47:20

自動(dòng)化物聯(lián)網(wǎng)IOT

2022-09-14 10:00:12

前端自動(dòng)化測試

2020-04-23 11:03:09

前端語言開發(fā)

2015-09-17 09:36:46

Chrome改變

2021-01-22 10:27:52

蜂窩物聯(lián)網(wǎng)物聯(lián)網(wǎng)IOT

2022-01-04 19:28:05

VMware云端虛擬化

2016-11-01 16:41:08

直通網(wǎng)線連接端口傳輸數(shù)據(jù)

2022-03-18 12:46:56

Go 語言編程語言

2020-09-23 13:40:01

信用卡欺詐網(wǎng)絡(luò)釣魚攻擊

2021-01-26 01:03:36

云原生工具云原生

2015-10-22 17:20:46

命令工具Linux

2019-07-18 12:57:21

大數(shù)據(jù)互聯(lián)網(wǎng)算法

2021-08-09 14:40:02

物聯(lián)網(wǎng)IOT智能家居

2023-05-18 09:00:00

人工智能StarCoder編程語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)