随着前端技术的迅猛发展,微前端架构成为了应对复杂大型应用的一种流行方案。通过引入微前端,多个团队可以在同一个项目中使用不同的技术栈(如⚛️React、🔮Vue、📐Angular等),并将其独立模块化后集成到同一页面中。然而,这种基于多框架并存的设计思路并非在所有场景中都适用,尤其是在高度交互性需求较强的应用中,如📹音视频处理、实时🤖AI集成等非传统的🌐Web应用场景。
本文将探讨当前微前端架构的不足,尤其是在面对复杂业务逻辑和高交互场景时的局限性,并提出一种新的分层式微前端架构设计,该架构通过展示层和业务层的分离以及基于功能的横向拆分来更好地适应现代前端需求。
为什么写这篇文章呢?就是我突然在想如何简化设计、复用逻辑,这时候想到了分层设计-专注点分离,然后发现web前端承担了几乎所有的层:我们既要用vue/react绘制ui表示层,也要用vuex/redux管理业务和状态,有需要做本地持久化,还需要使用indexed/localstorage做存储;如果只是简单的也好,但现在非传统行业的前端越来越复杂(例如协同办公、音视频会议、在线的solidworks、photoshop等等),于是我就看了看不少微前端的设计想到 现在例如很多的微前端框架是不是走错方向了-或者说不只是这一种方向,或许界面层就应该剥离出来、纯粹一点,微前端的拆分应该是基于功能特性-不包含界面部分
与其说现在的微前端走错方向,不如说 你可能需要针对业务选择合适的微前端框架,或者搭建合适当前项目的微前端架构
传统微前端架构 - 面向企业轻逻辑
1. 过度强调技术栈并存,而忽视业务逻辑复杂性
目前大多数微前端架构的核心思想是技术栈的解耦,即让不同的团队在同一个项目中使用各自熟悉的前端框架,比如⚛️React、🔮Vue或📐Angular。以🔗Qiankun等微前端框架为代表,解决的是如何在页面中加载和集成这些独立的微前端应用,使它们可以共存、协同工作。
🔗Qiankun是基于single-spa实现的微前端框架,它通过主应用与子应用的加载与通信机制,实现了不同技术栈的应用共存。🔗Qiankun主要特点包括:
- 基于single-spa内核:🔗Qiankun扩展了single-spa的功能,提供了更加开箱即用的微前端解决方案。
- 应用隔离:通过沙箱机制保证各个子应用之间互不干扰,避免全局变量冲突。
- 主应用与子应用通信:提供了事件机制和共享状态管理,使主应用和子应用之间可以进行双向通信。
graph TD
A[主应用] --> B[子应用1]
A --> C[子应用2]
B --> D[沙箱机制]
C --> D
A --> E[事件机制]
B --> E
C --> E
然而,在许多实际业务场景中,前端的复杂性并不一定体现在技术栈的多样性上,而是业务逻辑的复杂性。当应用需要处理如实时通信、多媒体推拉流、权限管理、🤖AI交互等复杂功能时,前端不再仅仅是🖼️UI呈现工具,而要承担更多的计算、数据处理、业务逻辑分配等任务。
这种局面下,传统微前端架构过度关注于框架并存,而忽视了前端应用中真正复杂的部分——业务逻辑的解耦与分离。
2. 在高交互性应用中的局限性
在高交互性应用场景中,前端不仅要处理界面展示,还要承担大量的状态管理、数据同步和实时计算。这类应用通常具有复杂的音视频交互需求,如会议系统、直播平台、在线教育工具等,此外,现代应用越来越多地引入🤖AI技术,例如图像识别、自然语言处理等。
这些场景下,传统的微前端架构显得无力应对。首先,前端框架的切换并不是最主要的挑战,关键问题在于如何处理大量的实时数据流、媒体流以及业务逻辑的同步和状态管理。其次,当前的微前端方案通常依赖于🖼️iframe或模块加载器来隔离不同框架的影响,但在高性能需求场景下,🖼️iframe的性能瓶颈和复杂的跨域通信带来了诸多问题。
3. 非传统SPA应用中的适用性差
单页应用(SPA)架构在过去是微前端架构的主要适用场景,页面内容的动态加载、组件间的通信以及路由管理是其主要挑战。然而,在非传统的🌐Web应用中,尤其是非典型的SPA应用场景下,页面往往不是核心的负担。取而代之的是复杂的业务逻辑,包括实时推流、断点续传、权限控制、甚至是分布式状态管理。
在这种背景下,过度关注前端的技术栈分离,忽略了对应用内部复杂业务处理的需求,使得现有的微前端架构无法有效满足这些场景。
面向未来:新的分层式微前端架构设计-重业务、交互
为了应对当前微前端架构的局限性,我们需要一种新的设计思路:分层式微前端架构。这种架构不仅仅关注于框架的分离和技术栈的共存,而是更注重业务逻辑与界面展示的解耦,并通过功能模块的横向拆分来提高系统的灵活性和可扩展性。
graph TD
A[用户界面层] --> B[展示层]
B --> C[业务通讯层]
C --> D1[数据处理模块]
C --> D2[权限管理模块]
C --> D3[音视频模块]
D1 --> E[后端服务]
D2 --> E
D3 --> E
1. 展示层与业务层的分离
在新的微前端架构中,应该将展示层和业务层完全解耦:
- 展示层:负责处理用户交互和界面渲染。这一层应尽量保持轻量,主要任务是响应用户的输入并实时更新🖼️UI。
- 业务层:承担所有的业务逻辑、计算和数据处理任务。无论是权限管理、数据同步,还是复杂的🤖AI计算、媒体流处理,都应该由业务层负责。业务层可以独立运行,具有高度的可扩展性和可替换性,甚至可以实现多线程或多进程的并行处理。
这种分层设计的优势在于,前端界面和业务逻辑的职责分离,使得前端开发可以更加聚焦于🖼️UI和用户体验,而不需要承担繁重的业务逻辑和数据处理。通过这种解耦,团队可以更加专注于各自的领域,展示层团队专注于用户交互和界面优化,而业务层团队则可以关注业务逻辑的实现和系统性能的提升。
2. 基于功能的横向拆分
与现有的微前端架构强调技术栈解耦不同,新的分层式微前端架构更关注功能模块的横向拆分。这种横向拆分不是基于界面元素的分割,而是基于具体的业务功能模块:
- 例如,在会议应用中,可以将不同的业务模块(如“音视频流管理模块”、“成员管理模块”、“权限控制模块”、“文件管理模块”等)横向拆分成独立的微服务或模块。每个功能模块独立负责其对应的业务逻辑,展示层只需要与这些模块进行通信,而不关心具体的业务实现。
通过这种基于功能的横向拆分,前端架构能够应对复杂业务场景的变化,尤其是在需求频繁变化或不同模块之间高度解耦的情况下,各个模块可以独立开发、维护和升级。这种架构不仅提高了开发效率,还能使得不同团队根据业务需求的变化更灵活地调整其模块,减少相互之间的依赖,从而提高系统的整体稳定性。
3. 并发与实时交互的支持
在高交互性应用场景中,前端需要处理大量的实时数据流和并发请求。新的分层式微前端架构可以通过多线程、Web Workers、甚至WebAssembly来进行计算和业务逻辑的分发,使得前端不再是单纯的🖼️UI渲染者,而是通过业务层的并行计算,提升整体系统的响应速度和处理能力。
例如,前端的展示层可以通过轻量级的消息队列与后端的业务层(如🤖AI服务、媒体处理模块)通信,从而使得复杂的计算任务不阻塞前端的渲染任务。这种协同计算的方式大大提高了复杂应用的性能表现。🛠️Web Workers能够帮助将复杂的计算任务从主线程中分离出来,防止界面卡顿,而WebAssembly则可以加速某些需要高性能计算的逻辑,例如图像处理或机器学习推理。
此外,在实时交互场景中,利用WebSocket等技术进行双向通信,可以确保用户操作和系统反馈之间的延迟最小化。这对于实时性要求高的应用,例如多人视频会议、在线游戏和实时协作工具尤为重要。通过在业务层中引入这些技术手段,分层式微前端架构能够更好地支持复杂的实时交互需求。
两种微前端架构对比表
特性 | 传统微前端架构 | 分层式微前端架构 |
---|---|---|
技术栈解耦 | 强调多框架并存 | 注重业务逻辑与界面展示分离 |
应用隔离方式 | 使用 iframe 或沙箱机制 | 基于模块化和横向拆分 |
高交互性支持 | 性能瓶颈,跨域通信复杂 | 支持多线程、Web Workers、WebAssembly |
适用场景 | 适用于多框架 SPA | 适用于复杂业务逻辑、高交互性需求的应用 |
业务逻辑复杂性处理 | 不够灵活,关注点在框架解耦 | 通过功能模块的横向拆分提高灵活性 |
系统性能与扩展性 | 受限于框架间的隔离机制 | 灵活的业务逻辑分发与并行计算 |
数据安全与隔离 | 依赖于 iframe 沙箱 | 更加细致的权限控制和数据保护机制 |
结语
传统的微前端架构通过技术栈的分离解决了大型前端项目中多团队、多框架共存的难题,但在面对复杂业务逻辑、高交互性需求的现代🌐Web应用中,显得越来越力不从心。分层式微前端架构通过展示层与业务层的解耦以及基于功能模块的横向拆分,更好地应对现代前端的复杂需求。
未来的前端架构将通过更加细致的功能模块拆分和灵活的业务逻辑分发,构建高性能、高扩展性、易维护的系统。这一思路不仅适用于传统🌐Web应用,也适用于更复杂的交互场景,如📹音视频处理、🤖AI集成和大规模实时数据交互。
繁杂的工作可以让AI去实现,我们定义好交互接口、便捷的业务组合即可,微前端或许可以将部分内容纯粹化-对人更难但对AI来说简单(例如去掉框架),这样我们就可以有更多时间专注于业务的设计组合