跳到主要內容
黯羽輕揚每天積累一點點

Why micro-frontends?

免費2019-11-02#Front-End#微前端与组件化#微前端的价值#why we need micro-frontends#micro-frontends pros and cons#微前端架构

為什麼需要微前端?微前端能解決什麼問題?組件化解決不了嗎?微前端究竟帶來了什麼?

寫在前面

上一篇 Micro Frontends 已經從概念定義及實現思路上探究了微前端是什麼,而要徹底理解微前端的話,還需要想清楚這些問題:

  • 為什麼需要微前端?

  • 微前端能解決什麼問題?組件化解決不了嗎?

  • 微前端究竟帶來了什麼?多技術棧並存?統一的技術棧不好嗎?

一。背景:為什麼需要微前端?

從最初的 HTML 內聯腳本,到 9102 年的幾十萬行 JavaScript 代碼,前端已經變得越來越重:

  • 幾個 G 的前端代碼庫

  • 數百號前端開發人員

  • 幾 MB 的 Bundle Size

也越來越複雜:

  • 層出不窮的框架、類庫

  • 各式各樣的工程化體系

  • 別具特色的跨端實踐

因而需要一種分解複雜度、提升協作效率、支持靈活擴展的架構模式,於是,微前端 登上了舞台

二。應用場景:微前端能解決什麼問題?

微前端的理念類似於微服務,將龐大的整體拆成可控的小塊,並明確它們之間的依賴關係。

通過拆分自治、支持多技術棧並存的方式,解決前端應用所面臨的種種問題:

  • 業務模塊間日益加劇的耦合如何治理?

  • 開發團隊如何拆分、解耦,才能達到並行開發的目的?

  • 新框架、新方案如何適應現有的工程環境(構建工具等)?

  • 舊的框架類庫如何平穩升級?

按業務功能將一整塊前端應用分解成一系列更小、更內聚的微前端應用,同時通過明確的交互協議來管理這些應用間的依賴關係,實現不同業務模塊的解耦。並將每個微前端應用交由獨立團隊負責,各自獨立開發獨立部署,充分利用並行性

另一方面,在多技術棧並存能力的加持下,不僅能夠低成本引入新的技術實踐,還允許低風險地替換產品局部功能,意味著依賴項升級、架構更替、UI 改版等重大決策都能以循序漸進的方式平穩落地

  1. 分解:將應用拆分成由一系列小型應用(子應用)組成的應用

  2. 替換:替換子應用

  3. 組合:確保替換過的能夠和諧工作

通過微前端框架建立應用間的主從關係(1 個容器應用 + n 個子應用),接著進行局部替換,直至全部完成。然而,實踐中通常需要在重構的同時保證新特性的持續迭代,所以實際流程可能是:

  1. 抽象:增加一層主從關係,比如通過前端路由來控制

  2. 擴展:新增子應用

  3. 組合:原應用直接作為一整個子應用,帶著新特性(新增的子應用)上線

  4. 重構:(時間上能與擴展並進)分解、替換原應用

讓重構等工作能夠在相對較長的時間跨度下可控地漸進完成,而無需承擔一刀切的資源需求與變更風險

組件化解決不了嗎?

The problems they're supposed to solve sound to me like they're already solved by a good component model. So is this solving an organizational issue rather than technical one? Such as if two teams can't agree on anything, even shared infra.

(摘自 I don't understand micro-frontends.

誠然,組件化也能實現拆分自治,比如在 React 中可以通過 React.lazy + Suspense 的方式優雅地完成代碼拆分

但這建立在組件模型統一(或者說技術棧一致)的前提下,而微前端的另一半優勢在於能夠打破單一技術棧的限制

They are microservices in the browser. Meaning separately built and deployed frontend apps that can choose their own framework and libs. The purpose is organizational scaling and avoiding framework lock-in.

這是組件化、模塊化等方案所無法滿足的。同樣的,git submodule、npm module 等拆分方案也都無法直接提供多技術棧並存的能力

三。意義:微前端究竟帶來了什麼?

工程價值

一半來自模塊化帶來的好處,諸如:

  • 研發效率提升:多業務線並行開發,團隊自治,獨立迭代

  • 交付成本降低:應用級功能複用

  • 運維風險降低:變更範圍縮小

另一半來自多技術棧並存能力的好處:

  • 技術選擇增多:不再與單一技術棧捆綁在一起,有助於新技術、新交互模式的實驗性試錯

  • 可複用性增強:技術棧差異不再是功能複用的障礙,對於第三方模塊尤為重要

  • 重構風險降低:低風險局部替換,漸進地完成大規模重構

當然,允許多技術棧並存,並不意味著鼓勵引入盡可能多的技術棧,因為更少的技術棧通常更有利於基礎設施建設、資源複用與經驗共享

商業價值

微前端視角下的 Web 應用是一系列獨立功能的組合:

The idea behind Micro Frontends is to think about a website or web app as a composition of features which are owned by independent teams.

(摘自 What are Micro Frontends?

因此,微前端應用能夠像雲計算背景下的雲服務一樣能夠即取即用,實現應用模塊級(第三方)功能的接入/融合,其商業價值在於:

  • 細粒度、可組合的前端產品形態:前端產品/能力能夠以更細粒度,更靈活的形態輸出(像雲服務一樣按需自由組合)

  • 微前端應用生態:規範化的微前端應用能夠形成生態,進而產生類似於小程序的平台體系

參考資料

評論

暫無評論,快來發表你的看法吧

提交評論