淺聊微前端

為什么出現(xiàn)了微前端:

"單項目的弊端":
1.打包項目的等待時間長
2.新的技術棧
3.不同團隊項目的融合层皱,不同的技術棧不兼容

一、為什么要使用微前端赠潦?

微服務:
微服務的核心就是將傳統(tǒng)的一站式應用叫胖,根據(jù)業(yè)務拆分成一個一個的服務,徹底的解耦她奥。每一個服務提供單個業(yè)務功能的服務瓮增。一個服務做一件事情。
從技術的角度看就是一種小而獨立的處理過程哩俭,類似進程的概念钉赁,能夠自行單獨啟動和銷毀,擁有自己獨立數(shù)據(jù)庫携茂。
微服務注重解耦你踩,微前端注重聚合,

  • 不同團隊間開發(fā)同一個應用技術棧不同怎么辦讳苦?
  • 希望每個團隊可以獨立開發(fā)带膜,獨立部署怎么辦?
  • 項目中還需要老的應用代碼怎么辦鸳谜?
    微前端就是通過引入一種更優(yōu)雅的方式來解決面臨的問題

二膝藕、什么是微前端

微前端借鑒微服務的架構理念,將一個龐大的前端應用拆分為多個獨立靈活的小型應用咐扭,每個應用都可以獨立開發(fā)芭挽、獨立運行滑废、獨立部署,再將這些小型應用聯(lián)合為一個完整的應用袜爪。微前端既可以將多個項目融合為一蠕趁,又可以減少項目之間的耦合,提升項目擴展性辛馆,相比一整塊的前端倉庫俺陋,微前端架構下的前端倉庫傾向于更小更靈活


image.png

三、微前端的優(yōu)/劣勢

微前端優(yōu)勢

微前端特點:

  • 技術棧無關 主項目框架不限制接入項目的技術棧昙篙,子應用可自由選擇技術棧
  • 獨立開發(fā)/部署 團隊之間倉庫獨立腊状,單獨部署,互不依賴
  • 增量升級 當一個項目龐大起來苔可,技術升級和重構都比較麻煩缴挖,而微應用具備漸進式升級的特性
  • 獨立運行時 微應用之間運行時,互不依賴焚辅,狀態(tài)管理獨立
  • 提升效率 項目越龐大醇疼,越難以維護,協(xié)作效率越低下法焰。微應用就可以很好拆分,提高效率
    資源復用
    場景:如果項目需要開發(fā)某個新功能倔毙,而另外一個項目已經(jīng)開發(fā)過這個功能埃仪,如果想直接復用,對于傳統(tǒng)的單頁面應用來說陕赃,需要考慮到技術不同卵蛉,版本不同以及別人的頁面有些自己項目的某些操作,這些都要考慮到
    微前端可以將我們所需要的一些頁面或者功能么库,通過特定的配置傻丝,快速集合進一個新的項目中,達到快速的可復用級應用頁面及資源

微前端劣勢

1.重復依賴诉儒,不同應用之間的依賴包有可能會存在很多重復的葡缰,由于各應用獨立開發(fā)、編譯忱反、部署泛释,難免會出現(xiàn)重復依賴,不同應用之間重復下載依賴温算,額外再增加了流量和服務端壓力
2.技術成本變高怜校,一個問題的跟蹤,有可能需要對應的人員注竿,懂微前端茄茁,又懂主應用和子應用魂贬,可能需要同時深入了解微前端和react和vue才能解決問題,復雜度由代碼轉向基建裙顽。
3.沒有健全的前端周邊讓其充分發(fā)揮架構的優(yōu)勢

微前端的設計

主要采用:組合式應用路由方案
核心:“主從思想”
包括一個基座(MainApp)應用付燥、公共應用(CommanApp)和多個單獨的微應用(MicroApp)組成
基座應用:前端VUE SPA項目,主要負責渲染公共的頁面元素锦庸,比如 header机蔗、footer、應用注冊甘萧、路由映射萝嘁、消息下發(fā)、菜單渲染扬卷、邏輯控制牙言、數(shù)據(jù)傳輸?shù)取?br> 公共應用:單獨的VUE SPA項目,包含一些公用的頁面怪得、組件以及登陸邏輯等咱枉,輔助基座應用進行運行,
微應用是獨立前端項目徒恋,這些項目不限制接入的技術棧蚕断,可自由選擇技術棧,每個微應用注冊到基座應用中入挣,由基座進行管理亿乳,但是如果脫離基座也是可以單獨訪問

四、微前端實現(xiàn)

1.常見微前端方案

  • 基于iframe完全隔離的方案
    優(yōu)點:
    1.簡單無需任何改造
    2.js和css都是獨立的運行環(huán)境
    3.不限制使用径筏,可放多個iframe來組合業(yè)務
    缺點:
    1.刷新后路由狀態(tài)丟失葛假,無法保持路由狀態(tài)
    2.完全的隔離導致通訊交互困難,只能采用postMessage方式 全局上下文完全隔離滋恬,內(nèi)存變量不共享聊训。iframe 內(nèi)外系統(tǒng)的通信、數(shù)據(jù)同步等需求恢氯,主應用的 cookie 要透傳到根域名都不同的子應用中實現(xiàn)免登效果带斑。
    3.iframe中的彈窗無法突破其本身
    4.整個應用全量資源加載,加載太慢
  • 基于single-spa路由劫持方案
    通過劫持路由的方式來做子應用之間的切換勋拟,(監(jiān)聽url的變化動態(tài)加載資源)但接入方式需要融合自身的路由遏暴,有一定的局限性。
    上手成本高
  • 阿里qiankun
    qiankun基于single-spa做的封裝指黎,通過 import-html-entry 包解析 HTML 獲取資源路徑朋凉,然后對資源進行解析、加載醋安。
    優(yōu)點:
    1.基于single-spa封裝杂彭,提供了更加開箱即用的API
    2.接入微應用像接入iframe一樣簡單
    3.樣式隔離墓毒,確保微應用之間樣式互不打擾
    4.js沙箱,確保微應用之間全局變量/事件不沖突
    5.資源預加載亲怠,在瀏覽器空閑時間預加載未打開的微應用資源所计,加速微應用打開速度
    缺點:
    qiankun只能解決子項目之間的樣式污染,無法阻止子項目的樣式污染主項目的樣式

qiankun3.0籌備中团秽。主胧。。
3.0 里一個主要的功能是會把沙箱開放出去习勤,可以讓開發(fā)者自己根據(jù)場景制定沙箱規(guī)則踪栋。
比如上面提到的,有的場景你希望更嚴格的沙箱图毕,比如劫持 localStorage 的讀寫夷都,但是默認沙箱里沒有做,那你可以直接通過 api 把邏輯加進去予颤,
或者有的場景你覺得默認沙箱又太嚴格囤官,希望共享一些東西,那就可以通過一些配置蛤虐,把默認的行為關掉一些党饮。

(為什么不能在vite上使用微前端)
qiankun 是目前是社區(qū)主流微前端方案。它雖然很完善驳庭、流行刑顺,但最大的問題就是不支持 Vite。
因為 esm 的機制導致現(xiàn)在沒辦法把 js 拿來做手動 evaluate嚷掠,因為要支持沙箱,
如果看到社區(qū)中有qiankun+vite的方案荞驴,像這種是不支持沙箱的不皆。
它基于 import-html-entry 解析 HTML 來獲取資源,由于 qiankun 是通過 eval來執(zhí)行這些 js 的內(nèi)容熊楼,而 Vite 中的 script 標簽類型是 type="module"霹娄,里面包含 import/export 等模塊代碼, 所以會報錯:不允許在非 type="module" 的 script 里面使用 import鲫骗。

  • 京東micro-app方案
    micro-app借鑒了 WebComponent 的思想犬耻,通過 CustomElement 結合自定義的 ShadowDom,將微前端封裝成一個類 webComponents 組件执泰,從而實現(xiàn)微前端的組件化渲染
image.png
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枕磁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子术吝,更是在濱河造成了極大的恐慌计济,老刑警劉巖茸苇,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沦寂,居然都是意外死亡学密,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門传藏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腻暮,“玉大人,你說我怎么就攤上這事毯侦】蘧福” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵叫惊,是天一觀的道長款青。 經(jīng)常有香客問我,道長霍狰,這世上最難降的妖魔是什么抡草? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蔗坯,結果婚禮上康震,老公的妹妹穿的比我還像新娘。我一直安慰自己宾濒,他們只是感情好腿短,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绘梦,像睡著了一般橘忱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卸奉,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天钝诚,我揣著相機與錄音,去河邊找鬼榄棵。 笑死凝颇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的疹鳄。 我是一名探鬼主播拧略,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瘪弓!你這毒婦竟也來了垫蛆?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎月褥,沒想到半個月后弛随,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡宁赤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年舀透,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片决左。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡愕够,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出佛猛,到底是詐尸還是另有隱情惑芭,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布继找,位于F島的核電站遂跟,受9級特大地震影響,放射性物質發(fā)生泄漏婴渡。R本人自食惡果不足惜幻锁,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望边臼。 院中可真熱鬧哄尔,春花似錦、人聲如沸柠并。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽臼予。三九已至鸣戴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粘拾,已是汗流浹背窄锅。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留半哟,地道東北人酬滤。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓签餐,卻偏偏與公主長得像寓涨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子氯檐,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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