現(xiàn)代Web應(yīng)用程序變得越來(lái)越大,越來(lái)越復(fù)雜,有時(shí)由不同的團(tuán)隊(duì)來(lái)管理。 您的應(yīng)用程序可能具有由不同團(tuán)隊(duì)開發(fā)的功能,并且您希望在交付整個(gè)應(yīng)用程序之前僅將某些功能發(fā)布到生產(chǎn)環(huán)境中。 如果您有一個(gè)倉(cāng)庫(kù),您如何管理不同的團(tuán)隊(duì),不同的發(fā)布時(shí)間表?
這些復(fù)雜的應(yīng)用程序大多數(shù)都生活在客戶端,這使得維護(hù)變得更加困難。 這個(gè)整體式的大脂肪應(yīng)用程序還存在其他一些問題。 在這篇文章中,我們應(yīng)該考慮微觀前端的原因有哪些?
1. 應(yīng)用很小
第一個(gè)原因是應(yīng)用程序變小了,您不必下載大型代碼庫(kù),而只需要等待10分鐘即可安裝所有依賴項(xiàng)。 想象一下,您加入了一家公司并第一次克隆了存儲(chǔ)庫(kù),而您必須等待15分鐘才能下載依賴項(xiàng)并編譯項(xiàng)目。 當(dāng)您查看源代碼時(shí),有成千上萬(wàn)的組件被編寫,您甚至都不知道在哪里尋找或在哪里進(jìn)行更改等。如果您的應(yīng)用程序足夠小,則可以更快,更輕松地瀏覽應(yīng)用程序。
2. 應(yīng)用是獨(dú)立的
由于所有應(yīng)用程序都是分開劃分和開發(fā)的,因此它們彼此獨(dú)立。 當(dāng)您擁有一個(gè)整體應(yīng)用程序時(shí),您有太多彼此依賴的模塊和組件,從而導(dǎo)致在哪里進(jìn)行更改或在哪里尋找外觀等方面的困惑。設(shè)想一個(gè)場(chǎng)景,您必須在現(xiàn)有的整體應(yīng)用程序中進(jìn)行一些更改,并且 5個(gè)不同的團(tuán)隊(duì)為此工作。 有時(shí),您每次必須召開一次會(huì)議,從所有團(tuán)隊(duì)中查找信息大約需要2周的時(shí)間。 如果應(yīng)用程序具有明確定義的邊界并允許一個(gè)專門的團(tuán)隊(duì)專注于此,通??梢怨?jié)省大量時(shí)間。
3. 應(yīng)用程序更易于理解
應(yīng)用程序較小,由一個(gè)團(tuán)隊(duì)開發(fā),因此更易于理解。 由于這些應(yīng)用程序具有明確的界限,并且由一個(gè)團(tuán)隊(duì)開發(fā),因此它們通常遵循一致的樣式指南,這使它更易于理解。 對(duì)于大型應(yīng)用程序,有幾個(gè)團(tuán)隊(duì)在處理它,而他們通常不遵循一致的樣式指南。 您甚至可以定義一個(gè)好的項(xiàng)目結(jié)構(gòu),因?yàn)橛糜陧?xiàng)目的組件或服務(wù)數(shù)量很少。
4. 應(yīng)用程序更易于開發(fā)和部署
由于這些應(yīng)用程序的性質(zhì)很小,并且由一個(gè)團(tuán)隊(duì)開發(fā),因此非常容易開發(fā)和部署。 我們甚至可以獨(dú)立部署。 當(dāng)您在Jenkins上擁有大型應(yīng)用程序的構(gòu)建管道時(shí),由于擁有成千上萬(wàn)的組件,因此需要等待20至40分鐘才能下載并編譯該項(xiàng)目。 當(dāng)您為每個(gè)微型應(yīng)用程序定義單獨(dú)的管道時(shí),使用微型前端可以大大減少這些構(gòu)建時(shí)間。
5. 應(yīng)用程序更易于測(cè)試
我們必須為大型應(yīng)用程序編寫成千上萬(wàn)的單元測(cè)試,并且要花很多時(shí)間才能運(yùn)行。 這會(huì)使我們的部署過程變慢。 當(dāng)涉及到微型前端時(shí),每個(gè)應(yīng)用程序只有很少的單元測(cè)試,并執(zhí)行自己的單元測(cè)試,并且可以獨(dú)立運(yùn)行。
6. 應(yīng)用程序開發(fā)變得更快
由于有獨(dú)立的團(tuán)隊(duì),整個(gè)開發(fā)變得更快,更容易。
7. CI / CD變得更容易
每個(gè)應(yīng)用程序都可以集成和單獨(dú)部署,這使得CI / CD的過程變得更加容易。 當(dāng)我們修復(fù)應(yīng)用程序或引入新功能時(shí),我們不必?fù)?dān)心整個(gè)應(yīng)用程序,因?yàn)樗泄δ芏际仟?dú)立的。
8. 獨(dú)立的堆棧和版本
我們可以為每個(gè)應(yīng)用選擇自己的堆棧,但是這種情況很少發(fā)生,但是我們可以在同一堆棧中使用不同的版本。 例如,某些團(tuán)隊(duì)具有靈活性和時(shí)間來(lái)引入和測(cè)試同一堆棧的較新版本。 例如,React很好,可以靈活地完成任務(wù),而Angular可以很好地滿足其他要求,您可以根據(jù)自己的需要選擇框架,而不必依賴以前的開發(fā)人員或以前的團(tuán)隊(duì)就開始使用它。 相同適用于同一框架的不同版本。
9. 沒有共享代碼
在大型應(yīng)用程序中,我們傾向于跨功能共享代碼,但是這種擴(kuò)展性不好,并且隨著應(yīng)用程序越來(lái)越大,會(huì)引入許多錯(cuò)誤和相互依賴性。 這不適用于微型前端,因?yàn)槌撬怯薮赖慕M件,否則我們不會(huì)共享代碼。 我們可能會(huì)分享信息
10. 可以輕松更改架構(gòu),而無(wú)需觸及舊架構(gòu)
有時(shí)我們必須擴(kuò)展舊的體系結(jié)構(gòu),但是我們可能沒有開發(fā)人員來(lái)實(shí)現(xiàn)或擴(kuò)展該體系結(jié)構(gòu)。 借助微型前端方法,我們可以開發(fā)具有最新堆棧的新功能并獨(dú)立交付。 如果要擴(kuò)展已有20年的現(xiàn)有應(yīng)用程序,很難找到開發(fā)人員,因?yàn)槟仨毷褂眯录夹g(shù)來(lái)實(shí)現(xiàn)整個(gè)應(yīng)用程序,或者可以借助微前端方法進(jìn)行擴(kuò)展。
結(jié)論
我知道微前端并不能解決所有問題,但是它為您提供了足夠的理由和靈活性來(lái)開始考慮這些問題。