返回

有言可据,细评qiankun微前端初体验与传统架构的不同之处,构建更灵活的前端应用生态

前端

在构建复杂的前端应用时,传统的单体架构常常会遇到代码体积庞大、维护困难、扩展性差等问题。随着应用规模的增长,团队协作和功能迭代的效率也会受到影响。为了解决这些问题,微前端架构应运而生。微前端架构将一个大型的前端应用拆分成多个独立的、小型的前端应用,每个应用可以独立开发、测试、部署和扩展。

qiankun 是一个基于 single-spa 的微前端实现库,它提供了一套简单易用的 API,帮助开发者快速构建生产可用的微前端架构。qiankun 框架的核心思想是将不同的前端应用作为独立的子应用加载到主应用中,子应用之间可以相互隔离,也可以通过 qiankun 提供的通信机制进行数据交互。

qiankun 的优势

qiankun 框架具有以下优势:

  • 技术栈无关: 子应用可以使用任何前端技术栈,例如 React、Vue、Angular 等。
  • 独立开发部署: 每个子应用可以独立开发、测试和部署,不会影响其他子应用。
  • 增量升级: 可以逐步将现有的单体应用迁移到微前端架构,而不需要一次性重写整个应用。
  • 独立运行: 每个子应用都可以在独立的进程中运行,提高了应用的稳定性和安全性。

qiankun 的核心概念

qiankun 框架中有三个核心概念:

  • 主应用: 负责加载和管理子应用的应用。
  • 子应用: 可以独立开发、测试和部署的前端应用。
  • 基座应用: 主应用的另一种称呼,qiankun 中并没有严格区分主应用和基座应用。

qiankun 的工作原理

qiankun 框架的工作原理可以概括为以下几个步骤:

  1. 主应用注册子应用:主应用通过 registerMicroApps 方法注册子应用,并指定子应用的入口地址、激活条件等信息。
  2. 主应用监听路由变化:当浏览器地址发生变化时,主应用会根据路由规则判断是否需要加载子应用。
  3. 主应用加载子应用:如果需要加载子应用,主应用会通过 fetch 方法获取子应用的 HTML、CSS 和 JavaScript 文件,并将其注入到主应用的 DOM 中。
  4. 子应用启动:子应用的 JavaScript 文件会被执行,子应用会渲染自己的 UI 并与主应用进行交互。

qiankun 的实践

下面以一个简单的示例来说明如何使用 qiankun 框架构建微前端架构。

假设我们有一个电商网站,它包含了首页、商品列表页、商品详情页、购物车页和订单页等多个页面。我们可以将每个页面作为一个独立的子应用来开发。

主应用

主应用的代码如下:

import { registerMicroApps, start } from 'qiankun';

registerMicroApps([
  {
    name: 'home',
    entry: '//localhost:8080',
    container: '#container',
    activeRule: '/home',
  },
  {
    name: 'products',
    entry: '//localhost:8081',
    container: '#container',
    activeRule: '/products',
  },
  // ...其他子应用
]);

start();

子应用

每个子应用的代码结构类似于一个普通的 React 或 Vue 应用。子应用需要导出三个生命周期函数:bootstrapmountunmount

  • bootstrap 函数会在子应用第一次加载时被调用,用于初始化子应用。
  • mount 函数会在子应用被激活时被调用,用于渲染子应用的 UI。
  • unmount 函数会在子应用被卸载时被调用,用于清理子应用的资源。

常见问题解答

1. qiankun 和 single-spa 的区别是什么?

qiankun 是基于 single-spa 的微前端实现库,它对 single-spa 进行了封装,提供了一套更简单易用的 API,并增加了一些额外的功能,例如沙箱隔离、预加载等。

2. qiankun 支持哪些前端技术栈?

qiankun 支持任何前端技术栈,例如 React、Vue、Angular 等。

3. 如何在 qiankun 中实现子应用之间的通信?

qiankun 提供了 actions 机制来实现子应用之间的通信。主应用可以通过 initGlobalState 方法初始化一个全局状态,子应用可以通过 onGlobalStateChange 方法监听全局状态的变化,并通过 setGlobalState 方法修改全局状态。

4. 如何在 qiankun 中实现沙箱隔离?

qiankun 提供了两种沙箱隔离机制:LegacySandboxSnapshotSandboxLegacySandbox 使用 JavaScript 的原型链机制来隔离子应用的全局变量,SnapshotSandbox 使用快照机制来隔离子应用的 DOM 和全局变量。

5. 如何在 qiankun 中实现预加载?

qiankun 提供了 prefetchApps 方法来预加载子应用。主应用可以在空闲时间预加载子应用的 HTML、CSS 和 JavaScript 文件,从而加快子应用的加载速度。

qiankun 框架为构建复杂的前端应用提供了一种新的思路,它可以帮助开发者提高开发效率、降低维护成本、提升用户体验。随着微前端架构的不断发展,qiankun 框架也将不断完善,为开发者提供更加强大的功能和更加便捷的使用体验。