<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>MicroFrontend on Time Friend</title><link>https://time-friend.com/en/tags/microfrontend/</link><description>Recent content in MicroFrontend on Time Friend</description><generator>Hugo</generator><language>en-GB</language><lastBuildDate>Wed, 29 Jul 2026 15:15:07 +0800</lastBuildDate><atom:link href="https://time-friend.com/en/tags/microfrontend/index.xml" rel="self" type="application/rss+xml"/><item><title>Micro-Frontend Advanced 4 - Cross-Framework Shared Components (Widgetization)</title><link>https://time-friend.com/en/archive/micro-frontend-advanced-4-cross-framework-shared-components-widgetization/</link><pubDate>Sat, 22 Jun 2019 22:17:36 +0000</pubDate><guid>https://time-friend.com/en/archive/micro-frontend-advanced-4-cross-framework-shared-components-widgetization/</guid><description>&lt;p&gt;In micro-frontend, we can let sub-modules use different framework technology stacks according to our business needs. Although reaching this step is already very beautiful, is this the end of micro-frontend?&lt;/p&gt;
&lt;p&gt;The answer is no, micro-frontend boundaries can be further broadened.&lt;/p&gt;
&lt;p&gt;The previous micro-frontend article &lt;a href="https://time-friend.com/archive/qh7x5i5szfh/"&gt;https://time-friend.com/archive/qh7x5i5szfh/&lt;/a&gt; introduced how to call React components between sub-modules with the same technology stack.&lt;/p&gt;
&lt;p&gt;What we&amp;rsquo;re talking about today is how sub-modules between different technology stacks call components from different technology stacks.&lt;/p&gt;</description></item><item><title>Micro-Frontend Advanced 3 - Cross-Module Shared Components</title><link>https://time-friend.com/en/archive/micro-frontend-advanced-3-cross-module-shared-components/</link><pubDate>Sun, 12 May 2019 22:17:36 +0000</pubDate><guid>https://time-friend.com/en/archive/micro-frontend-advanced-3-cross-module-shared-components/</guid><description>&lt;p&gt;After front-end microservices, we face a problem: duplicate code between modules cannot be reused.&lt;/p&gt;
&lt;p&gt;If we use npm to manage our duplicate code, we&amp;rsquo;ll have additional costs maintaining npm packages.
Updating npm package versions in sub-modules is also very troublesome.
There&amp;rsquo;s no optimization in js file size either.&lt;/p&gt;
&lt;h1 id="component-sharing"&gt;Component Sharing&lt;/h1&gt;
&lt;p&gt;Today let&amp;rsquo;s talk about how to use one component simultaneously in multiple modules.&lt;/p&gt;
&lt;h2 id="approach"&gt;Approach&lt;/h2&gt;
&lt;p&gt;Manage public components in base module, encapsulate components as dynamic components, so when packaging we can split this component into a separate file.
When other sub-modules need this component, dynamically get it from Base module.&lt;/p&gt;</description></item><item><title>Micro-Frontend Advanced 2 - Local Development Guide</title><link>https://time-friend.com/en/archive/micro-frontend-advanced-2-local-development-guide/</link><pubDate>Mon, 22 Apr 2019 22:17:36 +0000</pubDate><guid>https://time-friend.com/en/archive/micro-frontend-advanced-2-local-development-guide/</guid><description>&lt;p&gt;After building our microservices front-end application using &lt;code&gt;single-spa&lt;/code&gt;, there&amp;rsquo;s actually a problem that will always trouble us,
That is how to develop effectively? How to be as simple and easy to use as our usual front-end application development.
Today using umi sub-module as an example, hoping to give everyone an idea&lt;/p&gt;
&lt;p&gt;Today I&amp;rsquo;ll introduce one method, hoping it helps everyone.&lt;/p&gt;
&lt;h2 id="module-loader"&gt;Module Loader&lt;/h2&gt;
&lt;p&gt;Do you remember my previous module loader, &lt;a href="https://time-friend.com/archive/1a60cede/"&gt;https://time-friend.com/archive/1a60cede/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We just need to encapsulate the original module loader into an npm package.&lt;/p&gt;</description></item><item><title>Micro-Frontend Advanced 1 - Umi-Based Submodule Solution</title><link>https://time-friend.com/en/archive/micro-frontend-advanced-1-umi-based-submodule-solution/</link><pubDate>Sat, 13 Apr 2019 22:17:36 +0000</pubDate><guid>https://time-friend.com/en/archive/micro-frontend-advanced-1-umi-based-submodule-solution/</guid><description>&lt;p&gt;It&amp;rsquo;s been more than half a year since the first article about front-end microservices. Many people are interested.&lt;/p&gt;
&lt;p&gt;Today let&amp;rsquo;s talk about how we build a more complete front-end microservices sub-module based on umi.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re using front-end technology stacks other than React,
Many of my handling methods can also be applied to other technology stacks.&lt;/p&gt;
&lt;p&gt;Hope it helps you too.&lt;/p&gt;
&lt;h1 id="excellent-umi-framework"&gt;Excellent umi Framework&lt;/h1&gt;
&lt;p&gt;In front-end mid-backend projects, front-end microservices needs are relatively strong.&lt;/p&gt;</description></item><item><title>Building Your Single-SPA Micro Frontend App with Webpack &amp; SystemJS</title><link>https://time-friend.com/en/archive/single-spa-webpack-systemjs/</link><pubDate>Wed, 31 Oct 2018 01:00:00 +0000</pubDate><guid>https://time-friend.com/en/archive/single-spa-webpack-systemjs/</guid><description>&lt;p&gt;Here is an introduction to using micro frontend applications built with Single-SPA in various popular build tools.&lt;/p&gt;
&lt;h1 id="webpack-2"&gt;Webpack 2+&lt;/h1&gt;
&lt;p&gt;Webpack 2+ supports &lt;code&gt;import()&lt;/code&gt; for code splitting. Webpack 2+ is already widely used in other projects, so I won&amp;rsquo;t go into too much detail here.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;import&lt;/span&gt; {&lt;span style="color:#a6e22e"&gt;registerApplication&lt;/span&gt;} &lt;span style="color:#a6e22e"&gt;from&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;single-spa&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;registerApplication&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;app-name&amp;#39;&lt;/span&gt;, () =&amp;gt; &lt;span style="color:#66d9ef"&gt;import&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;./my-app.js&amp;#39;&lt;/span&gt;), &lt;span style="color:#a6e22e"&gt;activeWhen&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;activeWhen&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; window.&lt;span style="color:#a6e22e"&gt;location&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;pathname&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;indexOf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;/my-app&amp;#39;&lt;/span&gt;) &lt;span style="color:#f92672"&gt;===&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="systemjs"&gt;SystemJS&lt;/h1&gt;
&lt;p&gt;In our previous projects, we used SystemJS because it facilitates secondary builds after application deployment. It&amp;rsquo;s also very convenient to use.&lt;/p&gt;</description></item><item><title>Single-SPA Micro Frontend Demo Collection</title><link>https://time-friend.com/en/archive/single-spa-demo-guide/</link><pubDate>Wed, 31 Oct 2018 00:00:00 +0000</pubDate><guid>https://time-friend.com/en/archive/single-spa-demo-guide/</guid><description>&lt;p&gt;Here are the single-spa micro frontend demos that can be found on GitHub:&lt;/p&gt;
&lt;h2 id="single-spa-examples"&gt;&lt;a href="https://github.com/CanopyTax/single-spa-examples"&gt;single-spa-examples&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is the official single-spa example. Here is the &lt;a href="http://single-spa.surge.sh"&gt;online demo&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="simple-single-spa-webpack-example"&gt;&lt;a href="https://github.com/joeldenning/simple-single-spa-webpack-example"&gt;simple-single-spa-webpack-example&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is a usage example built with webpack. The webpack version might be a bit old, but the concept is the same.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="single-spa-angular-cli-examples"&gt;&lt;a href="https://github.com/PlaceMe-SAS/single-spa-angular-cli-examples"&gt;single-spa-angular-cli-examples&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;An Angular example based on angular-cli, suitable for Angular 2.0+ versions.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="single-spa-es5-angularjs"&gt;&lt;a href="https://github.com/joeldenning/single-spa-es5-angularjs"&gt;single-spa-es5-angularjs&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;An AngularJS example, i.e., AngularJS 1.x version.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="single-spa-portal-example"&gt;&lt;a href="https://github.com/me-12/single-spa-portal-example"&gt;single-spa-portal-example&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is already a very complete multi-tech-stack use case, integrating multiple tech stacks with inter-module communication ideas. Very worth studying.&lt;/p&gt;</description></item><item><title>Micro Frontend Solution 8 - Secondary Build</title><link>https://time-friend.com/en/archive/micro-frontend-solution-8-secondary-build/</link><pubDate>Fri, 07 Sep 2018 01:00:00 +0000</pubDate><guid>https://time-friend.com/en/archive/micro-frontend-solution-8-secondary-build/</guid><description>&lt;h1 id="secondary-build"&gt;Secondary Build&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Further optimize our micro frontend performance&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In a micro frontend architecture, each module outputs fixed files, such as the previously mentioned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project config file&lt;/li&gt;
&lt;li&gt;Store.js file&lt;/li&gt;
&lt;li&gt;main.js render entry file&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;These three are the necessary files for each module in a micro frontend architecture.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When the module loader starts the entire project, it must load all modules&amp;rsquo; config files and Store.js files.
In a previous article, we discussed &lt;code&gt;config automation&lt;/code&gt;, which is essentially a simple form of secondary build.
Although each module&amp;rsquo;s config file is not very large, each file is loaded and is necessary for project startup.
Each file takes one HTTP request, and each file&amp;rsquo;s blocking affects the project&amp;rsquo;s startup time.&lt;/p&gt;</description></item><item><title>Micro Frontend Solution 7 - Static Data Sharing</title><link>https://time-friend.com/en/archive/micro-frontend-solution-7-static-data/</link><pubDate>Thu, 06 Sep 2018 01:00:00 +0000</pubDate><guid>https://time-friend.com/en/archive/micro-frontend-solution-7-static-data/</guid><description>&lt;p&gt;From the previous introductions, I believe you now have a relatively complete understanding of micro frontends.
Below are some tips and handling methods I&amp;rsquo;ve developed during my work.&lt;/p&gt;
&lt;h1 id="dynamic-entry"&gt;Dynamic Entry&lt;/h1&gt;
&lt;p&gt;When a new submodule is mounted to the project, a new entry point in the UI is needed to access the submodule&amp;rsquo;s UI.
Such an entry point needs to be generated dynamically.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.alili.tech/images/micro/base-demo.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;For example: the menu on the left side of the image should not be hardcoded. It should be automatically generated based on the data provided by each module.&lt;/p&gt;</description></item><item><title>Micro Frontend Solution 6 - Build &amp; Deploy</title><link>https://time-friend.com/en/archive/micro-frontend-solution-6-build-deploy/</link><pubDate>Wed, 05 Sep 2018 01:00:00 +0000</pubDate><guid>https://time-friend.com/en/archive/micro-frontend-solution-6-build-deploy/</guid><description>&lt;h1 id="micro-frontend-build"&gt;Micro Frontend Build&lt;/h1&gt;
&lt;p&gt;There are some things to note when bundling micro frontend projects.
Take webpack as an example:&lt;/p&gt;
&lt;h2 id="amd-modules"&gt;AMD Modules&lt;/h2&gt;
&lt;p&gt;In previous articles, we mentioned that our loader is based on System.js.
So the final bundle of our micro frontend modules must conform to module specifications.
We use the &lt;code&gt;AMD module&lt;/code&gt; specification to build our modules.&lt;/p&gt;
&lt;h2 id="specify-base-path"&gt;Specify Base Path&lt;/h2&gt;
&lt;p&gt;Since the module loader calls the module entry file after bundling,
To clearly manage each module and correctly load all our module resources,
we specify a &lt;code&gt;publicPath&lt;/code&gt; for all module resources.&lt;/p&gt;</description></item><item><title>Micro Frontend Solution 5 - Route Distribution</title><link>https://time-friend.com/en/archive/micro-frontend-solution-5-route-distribution/</link><pubDate>Tue, 04 Sep 2018 01:00:00 +0000</pubDate><guid>https://time-friend.com/en/archive/micro-frontend-solution-5-route-distribution/</guid><description>&lt;h1 id="route-distributed-micro-frontend"&gt;Route-Distributed Micro Frontend&lt;/h1&gt;
&lt;h2 id="from-application-distributing-routes-to-routes-distributing-applications"&gt;From Application Distributing Routes to Routes Distributing Applications&lt;/h2&gt;
&lt;p&gt;There is no better way to explain micro frontend routing than this sentence.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Route-distributed micro frontend distributes different business functions to different, independent front-end applications through routing. This can usually be achieved through reverse proxy on an HTTP server, or through the routing that comes with the application framework.
Currently, route-distributed micro frontend architecture is probably the most adopted and easiest &amp;ldquo;micro frontend&amp;rdquo; solution. However, this approach looks more like a聚合 of multiple front-end applications, i.e., we just piece together these different front-end applications to make them look like a complete whole. But they are not — every time a user goes from App A to App B, they often need to refresh the page. — Quoted from phodal &lt;a href="https://microfrontend.cn"&gt;The Matters of Micro Frontends&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Micro Frontend Solution 4 - Message Bus</title><link>https://time-friend.com/en/archive/micro-frontend-solution-4-message-bus/</link><pubDate>Mon, 03 Sep 2018 01:00:00 +0000</pubDate><guid>https://time-friend.com/en/archive/micro-frontend-solution-4-message-bus/</guid><description>&lt;blockquote&gt;
&lt;p&gt;The main function of the micro frontend message bus is to bridge communication between modules.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="black-box"&gt;Black Box&lt;/h1&gt;
&lt;h2 id="problem-1"&gt;Problem 1:&lt;/h2&gt;
&lt;p&gt;After applying microservices architecture, each individual module becomes a black box.
What happens inside, what state changes, other modules have no way of knowing.
For example, when &lt;code&gt;Module A&lt;/code&gt; wants to perform an action based on a certain internal state of &lt;code&gt;Module B&lt;/code&gt;, there is no way for black boxes to communicate. This is a major problem.&lt;/p&gt;</description></item><item><title>Micro Frontend Solution 3 - Module Loader</title><link>https://time-friend.com/en/archive/micro-frontend-solution-3-module-loader/</link><pubDate>Mon, 03 Sep 2018 00:00:00 +0000</pubDate><guid>https://time-friend.com/en/archive/micro-frontend-solution-3-module-loader/</guid><description>&lt;p&gt;The micro frontend module loader handles three main responsibilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Loading project configuration files&lt;/li&gt;
&lt;li&gt;Loading module API files (used by the message bus, covered later)&lt;/li&gt;
&lt;li&gt;Loading module entry files&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;These are three essential parts for every module.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="configuration-file"&gt;Configuration File&lt;/h1&gt;
&lt;p&gt;In our micro frontend practice, each module has an external configuration file used when registering with Single-SPA.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;path&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;/project&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;prefix&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;/module-prefix/&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;main&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;/module-prefix/main.js&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;store&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;/module-prefix/store.js&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;base&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When a module supports multiple URL prefixes, the path can be an array:&lt;/p&gt;</description></item><item><title>Micro Frontend Solution 2 - Single-SPA</title><link>https://time-friend.com/en/archive/micro-frontend-solution-2-single-spa/</link><pubDate>Sun, 02 Sep 2018 22:17:36 +0000</pubDate><guid>https://time-friend.com/en/archive/micro-frontend-solution-2-single-spa/</guid><description>&lt;h1 id="technology-selection"&gt;Technology Selection&lt;/h1&gt;
&lt;p&gt;After extensive research, we chose &lt;a href="https://single-spa.js.org/"&gt;Single-SPA&lt;/a&gt; as the foundation for our frontend microservices solution.&lt;/p&gt;
&lt;video style="width:100%" src="https://static.alili.tech/data/video/Single-Spa%20Intro.mp4" controls="controls"&gt;
Your browser does not support video.
&lt;/video&gt;
&lt;h1 id="single-spa"&gt;Single-SPA&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;A JavaScript frontend solution for frontend microservices&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;With Single-SPA, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use multiple frameworks (React, Vue, AngularJS, Angular, Ember, etc.) on the same page without refreshing.&lt;/li&gt;
&lt;li&gt;Write new code with modern frameworks without refactoring existing code.&lt;/li&gt;
&lt;li&gt;Load each module on demand for better performance.&lt;/li&gt;
&lt;li&gt;Run each independent module separately.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Demo: &lt;a href="https://single-spa.surge.sh/"&gt;https://single-spa.surge.sh/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Micro Frontend Solution 1 - Thinking</title><link>https://time-friend.com/en/archive/micro-frontend-solution-1-thinking/</link><pubDate>Sat, 01 Sep 2018 22:17:36 +0000</pubDate><guid>https://time-friend.com/en/archive/micro-frontend-solution-1-thinking/</guid><description>&lt;blockquote&gt;
&lt;p&gt;In recent years, microservices architecture has become hugely popular in the backend development community, considered the future direction of IT software architecture. How can we apply the principles of backend microservices to build modern frontend applications?
Here I provide a frontend microservices solution that can actually be implemented in production.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://user-gold-cdn.xitu.io/2017/12/27/16098869b848027e?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" alt=""&gt;&lt;/p&gt;
&lt;h1 id="comparison-of-backend-and-frontend-microservices"&gt;Comparison of Backend and Frontend Microservices&lt;/h1&gt;
&lt;h2 id="advantages-of-backend-microservices"&gt;Advantages of Backend Microservices:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Controlled Complexity&lt;/strong&gt;: Small size, low complexity. Each microservice can be fully managed by a small development team, making it easy to maintain high maintainability and development efficiency.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Independent Deployment&lt;/strong&gt;: Since microservices run in separate processes, each can be deployed independently.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flexible Technology Choices&lt;/strong&gt;: In a microservices architecture, technology selection is decentralized. Each team can freely choose the most suitable tech stack based on their service needs and industry trends.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fault Isolation&lt;/strong&gt;: When a component fails, in a single-process traditional architecture, the fault is likely to spread within the process, causing global unavailability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: Monolithic applications can also scale horizontally, but it requires replicating the entire application to different nodes.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="advantages-of-frontend-microservices"&gt;Advantages of Frontend Microservices:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Controlled Complexity&lt;/strong&gt;: Each UI business module is developed by an independent frontend team, preventing code bloat, maintaining fast compilation during development, and keeping complexity low for easy maintenance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Independent Deployment&lt;/strong&gt;: Each module can be deployed independently, down to a single component&amp;rsquo;s UI, without affecting other modules.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flexible Technology Choices&lt;/strong&gt;: The most attractive advantage — you can use any frontend tech stack available today, including future ones, within the same project.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fault Isolation&lt;/strong&gt;: A single module failure does not affect the entire application.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: Each service can be independently scaled horizontally to meet business needs without unnecessary resource consumption.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id="when-do-we-need-frontend-microservices"&gt;When Do We Need Frontend Microservices?&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;The project&amp;rsquo;s tech stack is outdated, developers with relevant skills are scarce, feature expansion is difficult, and refactoring or maintenance costs are high.&lt;/li&gt;
&lt;li&gt;The project is too large, code compilation is slow, the development experience is poor, and a higher-level decoupling solution is needed.&lt;/li&gt;
&lt;li&gt;A single tech stack cannot meet your business requirements.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id="problems-and-challenges"&gt;Problems and Challenges&lt;/h1&gt;
&lt;p&gt;We will face the following issues:&lt;/p&gt;</description></item></channel></rss>