隨着咱們中後臺系統的複雜,每每會遇到多個團隊獨立維護的子應用接入統一的主應用中,這些子應用每每獨立開發、獨立部署、彼此徹底解耦,這時候往常的單一應用沒法知足業務的增加需求。而微前端即是用來解決隨着時間的推移業務複雜度的提高,某個單應用演變爲難以維護的「巨石應用」。css
這便文章並非一個源碼解析以及上手教程的文章,我但願從一個宏觀的角度介紹下微前端而且簡單聊一下微前端在咱們如今項目中的一些思考。html
我一直認爲拋離業務的技術改造都是沒有太大價值而且很難走遠的。這裏我先簡單介紹下我對目前項目所作的一個架構演變以及一些簡單思考。我目前所處一個大型的 B 端項目團隊,系統根據業務域劃分的子應用有幾十個,系統 PV 百萬+,因此在這樣一個龐大的系統中咱們的系統架構也經歷瞭如下一些變化。前端
在我剛加入團隊的時候,咱們的系統仍是一個先後端未徹底分離的架構,模版提供了一個入口掛載根節點,前端在根節點上渲染 React / Vue 應用。web
不難發現這樣的架構存在必定的弊端:chrome
可是值得慶幸的是,這時候咱們的系統已經有必定的分治思想了,主應用(這個時候應該說是 layout 層)和子應用單獨掛載在不一樣的模版片斷上,這也爲後面的 iframe 和微前端改造減小了很多工做量後端
其實,這樣的架構也有必定微前端的影子:) 。跨域
後面隨着後端微服務化的轉型,後端已經不去關心路由的管控和頁面的掛載,轉而提供更加原子化的微服務。而對咱們前端來講:瀏覽器
可是隨着 iframe 架構的落地以及後續迭代的進行,咱們也發現了 iframe 方案的一些弊端:前端框架
最後在今年中旬的時候我這邊將 iframe 架構升級到了微前端 + iframe 並存的架構,並開發落地了一系列微前端相關的開發工具鏈(喜大普奔...)。cookie
在我看來,微前端是一個思想,是一種開發模式和架構的演變,諸如 qiankun、icestark 等框架也僅是微前端實現的落地,合理的 iframe 實現何嘗不算是一種微前端實現的落地。咱們原來的 iframe 架構設計必定程度上也算是一種微前端思想,而且在我看來,iframe 對於這種跨團隊的中後臺巨無霸項目依然有着自然的優點,理由以下:
可是,與之而來的即是 iframe 的一些痛點:
儘管以上這些痛點或多或少的配合着一些 hack 的工具以及開發規範都有必定的解決方案,可是有更好的選擇爲何不嘗試呢:)
這裏我不去講概念,道理你們都懂,概念一搜全都是。例如微前端很官方的詮釋:
Techniques, strategies and recipes for building a modern web app with multiple teams that can ship features independently
就像巨石應用並非一蹴而就的,接下來我來經過一個巨石應用的演變來向你們介紹我理解的微前端。
起初咱們的系統可能僅有一個業務模塊。路由硬編碼在項目裏,layout 層和業務子系統也寫在一塊兒。
隨着業務的增加,咱們的系統接入了更多的業務模塊,這個時候其實經過必定的路由配置和多頁的配置,項目也還算是沒太大問題。
可是這個時候須要引發警覺,若是再接入了更多的業務模塊還停留在當前的模式下,項目該怎麼維護?
隨着業務更進一步的增加,接入的業務模塊愈來愈多,不只咱們以導航維度擴充的子應用增多,甚至諸如首頁這樣子的頁面上也會有歸屬於多個業務域的區塊。總結起來就會分爲兩類場景:
這時若是沒有很好的處理和子系統的拆分,那麼咱們的應用就會變爲巨石應用...
這時候咱們每每將系統根據業務域的劃分拆分紅不一樣的子應用,而承載這些子應用的 layout 層咱們拆分爲主應用,各個子應用獨立開發獨立發佈,而且由不一樣的業務團隊維護,以此來解決複雜的單體應用帶來的各類開發維護問題。
能夠看出,微前端即是採起分治的思想來避免單體應用演變成巨石應用的。
在我看來,在微前端的思想中,重點強調了幾點:
如今市面上的微前端框架有不少,例如阿里內部就有 icestack、qiankun 兩大比較成熟的開源微前端框架,以及社區上 singleSPA 等。那麼咱們該如何選擇適合咱們項目的微前端框架呢,這裏我簡單羅列了我在選擇微前端框架時候的一些思考:
最後,結合上面的一些思考以及咱們如今的系統架構,我選擇了 qiankun 來落地咱們的微前端方案。而且爲了保證微前端接入以及版本管控的便捷,咱們
以上即是我在作微前端改造時候結合業務系統的一些思考,若是有不對的地方歡迎指正。以後我也會輸出 qiankun 的源碼解析以及我所作的一些微前端工具的原理分析等文章(撒花...)。