微前端

一 、微前端概念

微前端是一種多個(gè)團(tuán)隊(duì)通過(guò)獨(dú)立發(fā)布功能的方式來(lái)共同構(gòu)建現(xiàn)代化 web 應(yīng)用的技術(shù)手段及方法策略
核心價(jià)值:
1.技術(shù)棧無(wú)關(guān) 主框架不限制接入應(yīng)用的技術(shù)棧重归,微應(yīng)用具備完全自主權(quán)
2.獨(dú)立開(kāi)發(fā)国夜、獨(dú)立部署 微應(yīng)用倉(cāng)庫(kù)獨(dú)立减噪,前后端可獨(dú)立開(kāi)發(fā),部署完成后主框架自動(dòng)完成同步更新
3.增量升級(jí) 在面對(duì)各種復(fù)雜場(chǎng)景時(shí)车吹,我們通常很難對(duì)一個(gè)已經(jīng)存在的系統(tǒng)做全量的技術(shù)棧升級(jí)或重構(gòu)筹裕,而微前端是一種非常好的實(shí)施漸進(jìn)式重構(gòu)的手段和策略
4.獨(dú)立運(yùn)行 每個(gè)微應(yīng)用之間狀態(tài)隔離,運(yùn)行時(shí)狀態(tài)不共享

之前微前端的實(shí)現(xiàn)方案:iframe
體驗(yàn)
iframe 最大的特性就是提供了瀏覽器原生的硬隔離方案窄驹,不論是樣式隔離朝卒、js 隔離這類問(wèn)題統(tǒng)統(tǒng)都能被完美解決。但他的最大問(wèn)題也在于他的隔離性無(wú)法被突破乐埠,導(dǎo)致應(yīng)用間上下文無(wú)法被共享抗斤,隨之帶來(lái)的開(kāi)發(fā)體驗(yàn)、產(chǎn)品體驗(yàn)的問(wèn)題丈咐。
iframe的問(wèn)題
父子應(yīng)用之間通信問(wèn)題
cookie共享問(wèn)題(可做單點(diǎn)登陸SSO)
交互視圖效果不佳

1瑞眼、url 不同步。瀏覽器刷新 iframe url 狀態(tài)丟失扯罐、后退前進(jìn)按鈕無(wú)法使用负拟。
2、UI 不同步歹河,DOM 結(jié)構(gòu)不共享掩浙。想象一下屏幕右下角 1/4 的 iframe 里來(lái)一個(gè)帶遮罩層的彈框,同時(shí)我們要求這個(gè)彈框要瀏覽器居中顯示秸歧,還要瀏覽器 resize 時(shí)自動(dòng)居中..
3厨姚、全局上下文完全隔離,內(nèi)存變量不共享键菱。iframe 內(nèi)外系統(tǒng)的通信谬墙、數(shù)據(jù)同步等需求,主應(yīng)用的 cookie 要透?jìng)鞯礁蛎疾煌淖討?yīng)用中實(shí)現(xiàn)免登效果经备。
4拭抬、慢。每次子應(yīng)用進(jìn)入都是一次瀏覽器上下文重建侵蒙、資源重新加載的過(guò)程造虎。
5、seo差纷闺,獲取不到iframe里面的內(nèi)容導(dǎo)致網(wǎng)站seo排名靠后

二算凿、推薦的幾個(gè)微前端框架

1.Qiankun

qiankun 是一個(gè)基于 single-spa微前端實(shí)現(xiàn)庫(kù),但已使 single?spa 可用于生產(chǎn)(production-ready)犁功。旨在幫助大家能更簡(jiǎn)單氓轰、無(wú)痛的構(gòu)建一個(gè)生產(chǎn)可用微前端架構(gòu)系統(tǒng)

1 優(yōu)點(diǎn)
  • 阿里團(tuán)隊(duì)開(kāi)發(fā)維護(hù),文檔多浸卦。
  • 基于 single-spa 封裝署鸡,提供了更加開(kāi)箱即用的 API。
  • 解耦限嫌,技術(shù)棧無(wú)關(guān)靴庆,任意技術(shù)棧的應(yīng)用均可 使用/接入,不論是 React/Vue/Angular/JQuery 還是其他等框架萤皂。
  • HTML Entry 接入方式撒穷,讓你接入微應(yīng)用像使用 iframe 一樣簡(jiǎn)單。
  • 樣式隔離裆熙,確保微應(yīng)用之間樣式互相不干擾端礼。
  • JS 沙箱,確保微應(yīng)用之間 全局變量/事件 不沖突入录。
  • 資源預(yù)加載蛤奥,在瀏覽器空閑時(shí)間預(yù)加載未打開(kāi)的微應(yīng)用資源,加速微應(yīng)用打開(kāi)速度僚稿。
  • umi 插件,提供了 @umijs/plugin-qiankun 供 umi 應(yīng)用一鍵切換成微前端架構(gòu)系統(tǒng)蚀同。
  • 兼容IE11
2 缺點(diǎn)

1.上線部署文檔較少
2.qiankun 只能解決子項(xiàng)目之間的樣式相互污染缅刽,不能解決子項(xiàng)目的樣式污染主項(xiàng)目的樣式

3.相關(guān)文檔

官網(wǎng):https://qiankun.umijs.org/zh/cookbook
github地址
qiankun 技術(shù)圓桌
微前端框架qiankun以及源碼

2. Webpack 5 的 Module Federation

Module Federation [?fed??re??n] 主要是用來(lái)解決多個(gè)應(yīng)用之間代碼共享的問(wèn)題,允許 JavaScript 應(yīng)用程序在運(yùn)行時(shí)從另一個(gè)應(yīng) 用程序動(dòng)態(tài)導(dǎo)入代碼。模塊將構(gòu)建唯一的 JavaScript 入口文件衰猛,其他應(yīng)用程 序可以通過(guò)設(shè)置 Webpack 配置項(xiàng)來(lái)下載該入口文件迟蜜。

它還通過(guò)啟用依賴關(guān)系共享來(lái)解決代碼依賴關(guān)系和包大小增加的問(wèn)題娜睛。例如结序, 如果你要下載一個(gè) React 組件配喳,那么你的應(yīng)用程序不會(huì)兩次導(dǎo)入 React 代 碼。模塊將自動(dòng)使用你已有的 React 源,僅額外導(dǎo)入組件代碼轧叽。

你可以使用 React.lazy 和 React.suspense 提供后備功能网严,以確保當(dāng)導(dǎo)入的代碼 由于某種原因失敗后,不會(huì)因構(gòu)建失敗而影響用戶體驗(yàn)灶壶。
多個(gè)單獨(dú)的構(gòu)建最后要形成一個(gè)應(yīng)用程序胸懈。這些單獨(dú)的構(gòu)建不應(yīng)相互依賴涌献,因
此可以單獨(dú)開(kāi)發(fā)和部署。

每個(gè)項(xiàng)目可以是host也可以是remote首有,也可以兩個(gè)都是燕垃。

1.優(yōu)點(diǎn)

1.webpack對(duì)于前端開(kāi)發(fā)者比較熟悉,比較容易接受

2.缺點(diǎn)

1.需要你們所有的項(xiàng)目都基于 Webpack井联,而且已經(jīng)升級(jí)到了 Webpack 5.
2.Webpack 5當(dāng)前并沒(méi)有正式加入Module Federation功能卜壕,而是在開(kāi)發(fā)分支中加入的,所以需要從git倉(cāng)庫(kù)中安裝Webpack 5 以及html-webpack-plugin烙常,即

npm install --save-dev git://github.com/webpack/webpack.git#dev-1
npm git://github.com/ScriptedAlchemy/html-webpack-plugin.git#master

3.全部打成一個(gè)包轴捎,打包時(shí)間較慢,據(jù)統(tǒng)計(jì)蚕脏,內(nèi)部云編譯平臺(tái)的平均編譯時(shí)間在 100s 以上侦副;
4.公共依賴共享,只能是host給remote提供驼鞭。兩個(gè)remote之間是不能共享的

3.官網(wǎng)文檔

webpack5官網(wǎng)
Webpack5 跨應(yīng)用代碼共享 - Module Federation

3.Piral

Piral 所要求的前提條件相當(dāng)寬松秦驯,開(kāi)發(fā)人員僅需要安裝喜歡的編輯器、終端挣棕、
網(wǎng)絡(luò)瀏覽器和 Node.js 即可译隘。開(kāi)發(fā)者可以在本地開(kāi)發(fā)機(jī)的仿真器中執(zhí)行和調(diào)
試 Piral instance(應(yīng)用程序外殼)和 piltes(功能模塊)。
特點(diǎn):
1穴张、高度模塊化
2细燎、多框架兼容
3、支持資源文件的拆分
4皂甘、全局狀態(tài)管理
5玻驻、獨(dú)立開(kāi)發(fā)和部署
6、CLI工具

1.優(yōu)點(diǎn)

translations 翻譯 Bundle Splitting 模塊劃分 Multi Framework 多框架 Main Framework 主框架 Modal manager 模態(tài)管理器 live Data Feed 實(shí)時(shí)數(shù)據(jù)推送
standards-Driven 標(biāo)準(zhǔn)驅(qū)動(dòng) free deployments 免費(fèi)部署 free development 免費(fèi)開(kāi)發(fā) form Management 表單管理 search providers 搜索提供程序 global state全局狀態(tài) notifications 通知 module Communication 模塊通信 stitching location運(yùn)行位置


與同類框架的比較
2.缺點(diǎn)

文檔太少,官網(wǎng)只有英文版

3.相關(guān)文檔

官網(wǎng):https://docs.piral.io/guidelines/tutorials/01-introduction
github

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末璧瞬,一起剝皮案震驚了整個(gè)濱河市户辫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嗤锉,老刑警劉巖渔欢,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瘟忱,居然都是意外死亡奥额,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)访诱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)垫挨,“玉大人,你說(shuō)我怎么就攤上這事触菜【爬疲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵涡相,是天一觀的道長(zhǎng)哲泊。 經(jīng)常有香客問(wèn)我,道長(zhǎng)催蝗,這世上最難降的妖魔是什么切威? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮生逸,結(jié)果婚禮上牢屋,老公的妹妹穿的比我還像新娘。我一直安慰自己槽袄,他們只是感情好烙无,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著遍尺,像睡著了一般截酷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乾戏,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天迂苛,我揣著相機(jī)與錄音,去河邊找鬼鼓择。 笑死三幻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的呐能。 我是一名探鬼主播念搬,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼抑堡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了朗徊?” 一聲冷哼從身側(cè)響起首妖,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爷恳,沒(méi)想到半個(gè)月后有缆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡温亲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年棚壁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铸豁。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡灌曙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出节芥,到底是詐尸還是另有隱情,我是刑警寧澤逆害,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布头镊,位于F島的核電站,受9級(jí)特大地震影響魄幕,放射性物質(zhì)發(fā)生泄漏相艇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一纯陨、第九天 我趴在偏房一處隱蔽的房頂上張望坛芽。 院中可真熱鬧,春花似錦翼抠、人聲如沸咙轩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)活喊。三九已至,卻和暖如春量愧,著一層夾襖步出監(jiān)牢的瞬間钾菊,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工偎肃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留煞烫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓累颂,卻偏偏與公主長(zhǎng)得像滞详,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • iframe iframe 是 html 提供的標(biāo)簽茵宪,能加載其他web應(yīng)用的內(nèi)容最冰,并且它能兼容所有的瀏覽器,因此稀火,...
    Moon_f3e1閱讀 2,147評(píng)論 0 0
  • 一暖哨、什么是微前端 Techniques, strategies and recipes for building ...
    梅西愛(ài)騎車閱讀 3,135評(píng)論 0 15
  • 什么是微前端 微前端是一種多個(gè)團(tuán)隊(duì)通過(guò)獨(dú)立發(fā)布功能的方式來(lái)共同構(gòu)建現(xiàn)代化 web 應(yīng)用的技術(shù)手段及方法策略. 微前...
    lean_閱讀 2,525評(píng)論 0 7
  • 微前端是一種類似于后端微服務(wù)的架構(gòu),它將微服務(wù)的理念應(yīng)用于瀏覽器端凰狞,即將單頁(yè)面前端應(yīng)用由單一的單體應(yīng)用轉(zhuǎn)變?yōu)槎鄠€(gè)小...
    空無(wú)一碼閱讀 510評(píng)論 0 0
  • 表情是什么篇裁,我認(rèn)為表情就是表現(xiàn)出來(lái)的情緒。表情可以傳達(dá)很多信息赡若。高興了當(dāng)然就笑了达布,難過(guò)就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 124,199評(píng)論 2 7