为你的猫或狗提供单一网页的时代已经过去了。现代网络开发提供了丰富的用户体验,跨越了用户流和互动的范围。构建、维护、部署和交付这些体验需要大规模的开发团队和复杂的部署系统。
网络应用程序的现状
现代网络应用程序最常用的模式是单页应用程序(SPA)。SPA的核心原则是建立一个单一的Web应用,并交付给用户。SPA的工作方式是根据用户的互动或数据变化重写页面内容。一个SPA通常会包含一个路由器来处理页面导航和深度链接,并且可以由多个组件组成--如购物篮或产品列表。
典型的SPA应用流程遵循标准步骤。
- 用户访问网络应用程序
- 浏览器要求使用JavaScript和CSS
- JavaScript应用程序启动并将初始内容添加到浏览器文档中
- 用户与应用程序进行交互--例如点击导航链接或向购物篮添加产品
- 应用程序重写浏览器文档的部分内容,以反映这些变化
在大多数情况下,一个JavaScript框架被用来实现上述功能。像React、Vue或Angular这样的框架都有模式和最佳实践来帮助建立SPA。以React为例,它是一个非常直观的框架,使用JSX根据用户和数据的变化来渲染内容。让我们看一下下面的一个基本例子。
//App.js
import React from "react";
import "./styles.css";
const App = () => {
return (
<div className="App">
<h1>Hello I'm a SPA 👋</h1>
</div>
);
}
export default App;
这是我们的基本应用。它渲染了一个简单的视图。
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
const rootElement = document.getElementById("root");
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
rootElement
);
接下来,我们通过将React应用程序渲染到浏览器DOM中来启动该应用程序。这只是SPA的基础。从这里,我们可以添加更多的功能,如路由和共享组件。
SPA是现代开发的主力军,但它们并不完美。一个SPA有很多缺点。
其中之一是失去了搜索引擎优化,因为应用程序在用户在浏览器中查看之前是不会被渲染的。谷歌的网络爬虫会尝试渲染页面,但不会完全渲染应用程序,你会失去许多你需要的关键词来攀升搜索排名。
框架的复杂性是另一个缺点。如前所述,有许多框架可以提供SPA体验,让你建立一个坚实的SPA,但每个框架针对的是不同的需求,知道采用哪个框架可能很难。
浏览器性能也可能是一个问题。因为SPA做了所有的渲染和处理用户的互动,它可以根据用户的配置而产生连锁反应。不是所有的用户都会在高速连接的现代浏览器中运行你的应用程序。为了有一个流畅的用户体验,需要尽可能地减少包的大小和减少客户端的处理。
所有上述情况导致了最终的问题,那就是规模。试图建立一个复杂的应用程序,以适应你所有用户的需求,需要多个开发人员。在SPA上工作可能会导致许多人在同一个代码上工作,试图进行修改并造成冲突。
那么,所有这些问题的解决方案是什么呢?微型前端!
什么是微型前端?
微型前端是一种架构模式,用于建立一个可扩展的网络应用程序,与你的开发团队一起成长,并允许你扩展用户互动。我们可以把它与我们现有的SPA联系起来,说它是我们SPA的一个切片版本。这个版本对用户来说仍然是一个SPA,但在引擎盖下,它根据用户的流程动态地加载应用程序的一部分。
为了进一步解释这个问题,让我们以一个比萨店的应用为例。其核心功能包括选择一个比萨饼,并能够将其添加到你的购物篮和结账。下面是一个模拟的SPA版本的应用程序。
让我们通过思考应用程序的不同部分,把它变成一个微型前端。我们可以用分解需要哪些组件来创建我们的应用程序的同样方式来考虑这个问题。
所有的微型前端都从一个主机容器开始。这是一个主要的应用程序,它把所有的部分都放在一起。这将是主要的JavaScript文件,在访问该应用程序时被发送给用户。然后我们进入实际的微前端--产品列表和篮子前端。这些都可以从主主机中局部分离出来,并作为一个微型前端交付。
让我们更深入地了解一下 "从主主机本地分离"。当我们想到传统的SPA时,在大多数情况下,你建立一个JavaScript文件并将其发送给用户。有了微前端,我们只把主机代码发送给用户,根据用户的流程,我们进行网络调用,为应用程序的其他部分获取额外的代码。这些代码可以存储在与起始主机不同的服务器上,并且可以随时更新。这导致了开发团队的工作效率更高。