【前端知识】简单讲讲什么是微前端

微前端介绍

      • 一、定义
      • 二、背景
      • 三、核心思想
      • 四、基本要素
      • 五、核心价值
      • 六、实现方式
      • 七、应用场景
      • 八、挑战与解决方案
    • 什么是single-spa
      • 一、核心特点
      • 二、核心原理
      • 三、应用加载流程
      • 四、最佳实践
      • 五、优缺点
      • 六、应用场景
    • 什么是 qiankun
      • 一、概述
      • 二、特点与优势
      • 三、核心功能
      • 四、使用场景
      • 五、注意事项
      • 六、总结
    • Web Components
      • 一、定义与背景
      • 二、核心组件与技术
      • 三、优势与特点
      • 四、应用场景
      • 五、使用方法
      • 六、注意事项

一、定义

微前端(Micro-Frontends)是一种将前端应用拆分为多个独立、可部署的部分的架构模式,每个部分可以由不同的团队独立开发、测试、部署和维护。这种架构类似于微服务在后端的应用,是为了应对复杂前端应用的维护和扩展问题而提出的。

二、背景

在现代前端开发中,随着应用规模的不断扩大和复杂度的增加,前端单体应用(Monolithic Front-End Application)逐渐暴露出维护困难、部署缓慢和团队协作受限等问题。为了解决这些问题,微前端架构应运而生。

三、核心思想

微前端的核心思想是将前端应用拆分为多个独立的模块,这些模块可以独立开发、测试、部署和运行。每个模块有自己的运行环境和技术栈,互不干扰。这些小应用通过某种方式集成在一起,形成最终的用户界面。

四、基本要素

  1. 技术栈无关:主框架不限制接入应用的技术栈,微应用具备完全自主权。
  2. 应用隔离:每个微前端模块应独立开发、测试和部署,不依赖于其他模块,同时每个模块的状态应相互隔离,避免全局状态的相互污染。
  3. 独立开发:微应用仓库独立,前后端可独立开发。

五、核心价值

  1. 团队独立性:不同团队可以负责不同的微前端模块,减少了代码耦合,提升了开发效率和协作性。
  2. 渐进迁移:企业可以逐步将旧系统迁移到新架构中,无需一次性重构整个应用,降低了风险和成本。
  3. 技术栈多样性:不同的微前端模块可以使用不同的技术栈(如React、Vue、Angular等),更好地满足团队的偏好和项目需求。
  4. 独立部署:每个微前端模块可以独立部署,这意味着可以更快地发布和回滚,减少对其他模块的影响。

六、实现方式

  1. 使用iframe:iframe是最稳定的、上手难度最低的微前端实现方式,但存在性能低、通信复杂、双滚动条、弹窗无法全局覆盖、加载是另一个window窗口导致页面缩放时内部窗口内部缩放不同步等问题。
  2. 使用single-spa:通过监听url change事件,在路由变化时匹配到渲染的子应用并进行渲染。这种方式较基础,对原有项目的改造过多,成本较高。
  3. 使用qiankun:qiankun是基于single-spa的微前端框架,由阿里巴巴开发,提供了更加开箱即用的API和工具,简化了微前端的实现。它使用import-html-entry插件将子应用的html作为入口,框架会将HTML document作为子节点塞到主框架的容器中。
  4. 使用Web Components:基于类WebComponent进行渲染的微前端框架,不同于目前流行的开源框架,它从组件化的思维实现微前端,旨在降低上手难度、提升工作效率。它提供了JS沙箱、样式隔离、元素隔离、预加载、资源地址补全、插件系统、数据通信等一系列完善的功能。

七、应用场景

  1. 大型企业应用:适用于需要多个团队协作的大型企业级应用。
  2. 需要频繁更新的应用:适用于需要频繁发布和更新的应用,可以降低发布风险。
  3. 多技术栈共存的应用:适用于需要同时使用多种前端技术的应用。
  4. 渐进式迁移:适用于需要逐步从老旧系统迁移到新系统的场景。

八、挑战与解决方案

尽管微前端有很多优点,但在实际应用中也面临一些挑战,包括性能优化、通信和状态管理、样式和资源管理、安全性、运维和监控等方面。为了解决这些挑战,可以采取以下措施:

  1. 性能优化:通过代码分割、懒加载、缓存等手段,优化微前端应用的加载速度和性能。
  2. 通信和状态管理:设计高效的模块间通信机制和全局状态管理方案,如使用CustomEvent、Redux、RxJS等来处理模块之间的通信。
  3. 样式和资源管理:使用CSS Modules、Scoped CSS或Shadow DOM等方式,确保各模块的样式不会相互影响,并处理资源共享问题。
  4. 安全性:使用内容安全策略(CSP)限制模块的资源加载和执行,配置跨域资源共享(CORS)策略,确保资源的安全加载,并设计统一的认证和授权机制。
  5. 运维和监控:建立完善的运维和监控体系,记录各个模块的运行日志,监控模块的加载和运行性能,及时发现和优化性能瓶颈,并设计统一的错误处理机制。

综上所述,微前端是一种应对复杂前端应用开发的新思路,它提高了团队协作的灵活性,提供了更高的可扩展性和可维护性。在实际应用中,需要根据项目需求、团队能力和技术栈等因素来综合考虑是否采用微前端架构。

什么是single-spa

Single-spa是一个用于构建微前端应用的JavaScript框架,它允许将多个单页面应用(SPA)聚合为一个整体应用,在同一页面上使用多个前端框架(如React、AngularJS、Angular、Ember等)而不用刷新页面。以下是对Single-spa的详细介绍:

一、核心特点

  1. 独立性:每个单页面应用都可以独立部署,新功能可以使用新框架开发,而旧的单页应用无需重写即可共存。
  2. 性能优化:Single-spa可以改善初始加载时间,通过延迟加载代码来优化性能。
  3. 灵活性:支持多种前端框架和库,开发者可以根据项目需求选择合适的技术栈。
  4. 生命周期管理:定义了微应用的生命周期钩子,包括bootstrap、mount、unmount等,方便开发者对微应用进行精细化的管理。

二、核心原理

  1. 路由机制:Single-spa通过监听URL的变化,自动加载和卸载对应的微应用。它提供了一套基于URL的路由机制,可以实现微应用之间的无缝切换和通信。
  2. 生命周期管理:微应用的生命周期钩子允许开发者在微应用的不同阶段执行相应的操作。例如,bootstrap钩子用于加载微应用的代码和资源,mount钩子用于渲染微应用的界面,unmount钩子用于清理微应用的资源和事件监听器。
  3. 微应用通信:虽然Single-spa本身不提供微应用之间的通信机制,但可以通过一些方式实现微应用之间的数据共享和通信。常见的方式包括使用全局状态管理库(如Redux、Vuex等)或事件总线(如EventEmitter)。

三、应用加载流程

  1. 注册阶段:每个微应用在启动时会注册到Single-spa中,并定义其加载和卸载的逻辑。
  2. 加载阶段:当用户访问某个微应用的页面时,Single-spa会根据Root Config配置文件中的路由规则,决定加载哪个微应用。
  3. 运行阶段:加载成功后,Single-spa会将微应用的根组件插入到页面中,同时监听路由变化,根据Root Config配置文件的路由规则,动态加载和卸载微应用。

四、最佳实践

  1. 模块化设计:将应用拆分为独立的微前端,每个微前端专注于特定功能或业务领域,有助于保持代码的清晰和可维护性。
  2. 独立开发和部署:允许微前端独立开发和部署,可以简化维护和更新过程,提高开发效率。
  3. 定义明确的路由规则:确保每个微前端只处理与其功能相关的路由,以保持应用架构的清晰度。
  4. 优化加载和执行时间:使用代码拆分、懒加载和缓存机制来提升应用性能。

五、优缺点

  • 优点

    • 支持多种前端框架和库。
    • 提供了灵活的路由机制和生命周期管理。
    • 可以改善初始加载时间并优化性能。
  • 缺点

    • 不支持Js沙箱和样式隔离,容易出现Js冲突和样式污染等问题。
    • 集成相对复杂,需要一定的学习和配置成本。

六、应用场景

Single-spa适用于需要将大型前端应用拆分为多个小型、独立的应用的场景,以实现应用的分治和更好的可扩展性。例如,在电商平台、企业管理系统或复杂的Web应用中,可以使用Single-spa来构建微前端架构,提高开发效率和应用的可维护性。

综上所述,Single-spa是一个功能强大且灵活的微前端框架,它允许开发者将多个单页面应用聚合为一个整体应用,并在同一页面上使用不同的前端框架。通过遵循最佳实践和注意其优缺点,开发者可以更好地利用Single-spa来构建高效、可扩展的Web应用。

什么是 qiankun

qiankun是一种微前端框架,旨在帮助开发者构建生产可用的微前端架构系统。以下是对qiankun的详细介绍:

一、概述

qiankun基于single-spa进行二次开发,将微服务的理念应用于浏览器端,即将Web应用由单一的单体应用转变为多个小型前端应用聚合为一的应用。各个前端应用还可以独立运行、独立开发、独立部署。

二、特点与优势

  1. 技术兼容性好:qiankun支持多种技术栈,如React、Vue、Angular等,使得主应用和子应用可以基于不同的技术架构进行开发。
  2. 接入方式简单:通过HTML entry的接入方式,使得微应用的接入像使用iframe一样简单。
  3. 耦合性低:各个团队可以独立开发、独立部署微应用,互不干扰,降低了系统之间的耦合性。
  4. 可维护性和扩展性好:微前端架构便于局部升级和增量升级,提高了系统的可维护性和扩展性。
  5. JS沙箱:确保微应用之间的全局变量/事件不冲突,提高了系统的稳定性。

三、核心功能

  1. 应用注册:主应用可以通过registerMicroApps方法注册多个子应用,每个子应用需要指定名称、入口、容器和激活规则等信息。
  2. 应用加载:当浏览器的URL发生变化时,qiankun会自动触发匹配逻辑,将匹配上的微应用插入到指定的容器中,并依次调用微应用暴露出的生命周期钩子。
  3. 应用通信:qiankun提供了一套完整的通信机制,允许不同的子应用之间进行跨框架和跨域的通信和交互。
  4. 资源预加载:在浏览器空闲时间预加载未打开的微应用资源,加速微应用的打开速度。

四、使用场景

qiankun适用于以下场景:

  1. 大型Web应用:将大型Web应用拆分成多个小型前端应用,便于独立开发、测试和部署。
  2. 多团队协作:多个团队共同开发一个Web应用时,可以使用qiankun将各自的应用集成在一起,实现协同工作。
  3. 渐进式重构:在面对复杂场景时,可以使用qiankun实现渐进式重构,逐步将旧系统升级为新的微前端架构。

五、注意事项

  1. 样式隔离:为了避免微应用之间的样式冲突,qiankun提供了样式隔离的功能。开发者需要确保子应用的样式不会影响到其他子应用或主应用。
  2. 沙箱环境:qiankun通过沙箱环境来隔离微应用之间的全局变量和事件。开发者需要注意在沙箱环境中运行子应用时可能出现的兼容性问题。
  3. 路由管理:在使用qiankun时,需要注意子应用的路由管理。如果子应用使用了hash路由或history路由,需要在主应用中进行相应的配置和适配。

六、总结

qiankun作为一种微前端框架,具有技术兼容性好、接入方式简单、耦合性低、可维护性和扩展性好等优势。它适用于大型Web应用、多团队协作和渐进式重构等场景。在使用qiankun时,需要注意样式隔离、沙箱环境和路由管理等问题。

Web Components

Web Components是一套允许开发者创建可重用自定义元素的技术,这些自定义元素具有封装的功能,可以独立于其他代码运行。以下是关于Web Components的详细介绍:

一、定义与背景

Web Components是由谷歌推动的浏览器原生组件技术,旨在解决代码复用、组件自定义以及复用管理等问题。它允许开发者创建自己的HTML标签,并在这些标签中使用自定义的JavaScript和CSS。Web Components技术通过标准化非侵入的方式封装一个组件,每个组件能组织好它自身的HTML结构、CSS样式、JavaScript代码,从而实现了代码的高度封装和复用。

二、核心组件与技术

Web Components主要包含以下四个核心技术:

  1. Custom Elements:允许开发者定义新的HTML元素,这些元素可以像原生HTML元素一样在页面中使用。
  2. Shadow DOM:提供了一种封装元素内部结构和样式的机制,使得元素的内部实现与外部代码相隔离。通过Shadow DOM,开发者可以在一个完全独立于主文档的DOM树中创建和管理元素的内容。
  3. HTML Templates:允许开发者定义可重用的HTML片段,这些片段可以在需要时通过JavaScript动态地插入到页面中。
  4. Slots:提供了一种机制,允许开发者在自定义元素中定义插槽(slots),以便将外部内容插入到元素的特定位置。

三、优势与特点

  1. 可重用性:Web Components允许开发者创建可重用的自定义元素,这些元素可以在多个页面或组件中使用,从而提高开发效率和代码的可维护性。
  2. 封装性:通过Shadow DOM和Custom Elements等技术,Web Components实现了对元素内部结构和样式的封装,使得不同组件之间的代码不会相互干扰。
  3. 互操作性:Web Components创建的组件可以跨框架使用,无需依赖特定的前端框架或库。这使得开发者可以在不同的技术栈中重用相同的组件。
  4. 可扩展性:Web Components提供了丰富的API和机制,允许开发者对组件进行扩展和自定义。

四、应用场景

Web Components可以广泛应用于各种类型的项目中,包括但不限于:

  1. Web应用:用于构建复杂的Web应用,如单页应用(SPA)或动态网站。通过Web Components,开发者可以创建可复用的自定义元素,提高开发效率和代码的可维护性。
  2. 桌面应用:结合像Electron这样的框架,Web Components可以用于构建跨平台的桌面应用。
  3. 移动应用:通过像Apache Cordova这样的框架,Web Components可以打包成移动应用,并在多个平台上运行。
  4. 物联网应用:Web Components可以创建可复用的自定义元素,这些元素可以在多个IoT设备或网关上使用。
  5. 数据可视化:用于构建数据可视化工具,如图表、仪表板等。

五、使用方法

使用Web Components创建自定义元素通常包括以下步骤:

  1. 定义自定义元素:使用JavaScript定义一个类,该类继承自HTMLElement。在类中实现元素的自定义行为。
  2. 注册自定义元素:使用window.customElements.define()方法将自定义元素与定义的类关联起来。
  3. 创建元素模板:使用<template>标签定义元素的HTML结构。如果需要,还可以使用<slot>标签定义插槽,以便将外部内容插入到元素的特定位置。
  4. 附加Shadow DOM:在自定义元素的构造函数中使用attachShadow()方法创建一个Shadow DOM,并将模板内容克隆到Shadow DOM中。
  5. 在页面中使用自定义元素:像使用原生HTML元素一样,在HTML代码中使用自定义元素标签。

六、注意事项

  1. 兼容性:虽然Web Components已经得到了广泛的支持,但在某些旧版浏览器中可能仍然存在兼容性问题。因此,在使用Web Components时,需要注意浏览器的兼容性。
  2. 样式隔离:虽然Shadow DOM提供了样式隔离的机制,但在某些情况下,仍然需要注意避免样式冲突。例如,当使用全局样式表时,需要确保样式不会影响到其他组件或页面。
  3. 性能优化:在使用Web Components时,需要注意性能优化。例如,可以通过延迟加载组件、减少DOM操作等方式来提高应用的性能。

综上所述,Web Components是一种强大的技术,允许开发者创建可重用、可维护、可扩展的自定义元素。它广泛应用于各种类型的项目中,为前端开发提供了更多的工具和技术选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三相正弦交流电的相序:揭秘正相序与反相序的奥秘

在电力系统中&#xff0c;三相正弦交流电的应用无处不在&#xff0c;从家庭用电到大型工业设备&#xff0c;都离不开它的稳定供电。然而&#xff0c;在三相交流电中&#xff0c;有一个概念常常让初学者感到困惑&#xff0c;那就是“相序”。今天&#xff0c;我们就来深入探讨一…

力扣面试题 - 24 插入

题目&#xff1a; 给定两个整型数字 N 与 M&#xff0c;以及表示比特位置的 i 与 j&#xff08;i < j&#xff0c;且从 0 位开始计算&#xff09;。 编写一种方法&#xff0c;使 M 对应的二进制数字插入 N 对应的二进制数字的第 i ~ j 位区域&#xff0c;不足之处用 0 补齐…

华为云容器监控平台

首先搜索CCE,点击云容器引擎CCE 有不同的测试&#xff0c;生产&#xff0c;正式环境 工作负载--直接查询服务名看监控 数据库都是走的一个 Redis的查看

Spring Cloud Stream实现数据流处理

1.什么是Spring Cloud Stream&#xff1f; 我看很多回答都是“为了屏蔽消息队列的差异&#xff0c;使我们在使用消息队列的时候能够用统一的一套API&#xff0c;无需关心具体的消息队列实现”。 这样理解是有些不全面的&#xff0c;Spring Cloud Stream的核心是Stream&#xf…

Notepad++--在开头快速添加行号

原文网址&#xff1a;Notepad--在开头快速添加行号_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Notepad怎样在开头快速添加行号。 需求 原文件 想要的效果 方法 1.添加点号 Alt鼠标左键&#xff0c;从首行选中首列下拉&#xff0c;选中需要添加序号的所有行的首列&#xff…

【ROS2】多传感器融合、实现精准定位:robot_localization

1、简述 robot_localization在SLAM建图、导航中常用于将多个传感器融合(IMU、里程计、深度相机、GPS等),以提高定位精度,为机器人提供了在三维空间中的非线性状态估计 robot_localization包含两个状态估计节点: ekf_localization_node:扩展卡尔曼滤波(EKF),缺点是非…

【智谱开放平台-注册_登录安全分析报告】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

永夜星河主题特效2(星河背景 + 闪烁文字+点击星星 + 文字弹出特效)

目录 图片展示 星河背景 闪烁文字点击星星 文字弹出特效 特效介绍&#xff1a; 使用方式&#xff1a; 图片展示 星河背景 闪烁文字点击星星 文字弹出特效 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8">&l…

SAP Ariba Contracts_Author the Main Agreement

SAP Ariba Contracts_Author the Main Agreement Workspace Documents 从SAP Ariba 项目模板中继承的文档将自动出现在控件的“文档”选项卡中项目&#xff0c;Workspace Documents 管理所有合同相关文件的地方&#xff0c;如主要协议&#xff0c;附录&#xff0c;合同条款等…

C++练习题(5)

//函数打印素数 #include <iostream> using namespace std; int is_prime(int n){ for(int j2;j<n;j){ if(n%j0) return 0; } return 1; } int main(){ int i0; for(int i100;i<200;i){ if(is_prime(i)1) pr…

编程之路,从0开始:动态内存管理

Hello&#xff0c;大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路。 我们今天来学习C语言中的动态内存管理。 目录 1、为什么要有动态内存管理&#xff1f; 2、malloc和free &#xff08;1&#xff09;malloc函数 &…

【题解】AT_joisc2007_mall ショッピングモール (Mall)

原题传送门 温馨提示&#xff1a;岛国题要换行&#xff01; 需要求一个矩阵的和&#xff0c;考虑二维前缀和。 题目中不允许矩阵中有负数&#xff0c;结合求和的最小值&#xff0c;我们把负数赋为最大值不就行了吗。 接下来就是求二维前缀和了。 基于容斥原理&#xff0c;二…

Apifox软件Mock前端数据,帮忙生成API接口文档

Apifox是一款功能强大的接口调试软件&#xff0c;其特色功能丰富&#xff0c;且在前端mock数据生成方面表现出色。以下是对Apifox软件特色功能的详解&#xff0c;以及如何进行前端mock数据生成的步骤&#xff1a; https://apifox.com/help/api-docs/exporting-api https://www…

入门pandas

pandas是本书后续内容的首选库。它含有使数据清洗和分析工作变得更快更简单的数据结构和操作工具。pandas经常和其它工具一同使用&#xff0c;如数值计算工具NumPy和SciPy&#xff0c;分析库statsmodels和scikit-learn&#xff0c;和数据可视化库matplotlib。pandas是基于NumPy…

Apple Vision Pro开发001-开发配置

一、Vision Pro开发硬件和软件要求 硬件要求软件要求 1、Apple Silicon Mac(M系列芯片的Mac电脑) 2、Apple vision pro-真机调试 XCode15.2及以上&#xff0c;调试开发和打包发布Unity开发者账号&&苹果开发者账号 二 、开启无线调试 1、Apple Vision Pro和Mac连接同…

无人机与低空经济:开启新质生产力的新时代

无人机技术作为低空经济的核心技术之一&#xff0c;正以其独特的优势在多个行业中发挥着重要作用&#xff0c;成为推动新质生产力革命的重要力量。无人机的应用范围广泛&#xff0c;从农业植保到物流配送&#xff0c;从城市监测到紧急救援&#xff0c;无人机的身影无处不在&…

故障排除-------K8s挂载集群外NFS异常

故障排除-------K8s挂载集群外NFS异常 1. 故障现象2. 原因梳理2.1 排查思路2.2 确认yaml内容2.3 创建k8s内的nfs测试2.3.1 创建nfs和svc2.3.2 测试创建pvc2.3.3 测试结果 2.4 NFS服务端故障排除2.4.1 网络阻断排除2.4.2 排除服务状态问题2.4.3 排查NFS权限问题 3. 故障排除 1. …

微服务即时通讯系统的实现(客户端)----(2)

目录 1. 将protobuf引入项目当中2. 前后端交互接口定义2.1 核心PB类2.2 HTTP接口定义2.3 websocket接口定义 3. 核心数据结构和PB之间的转换4. 设计数据中心DataCenter类5. 网络通信5.1 定义NetClient类5.2 引入HTTP5.3 引入websocket 6. 小结7. 搭建测试服务器7.1 创建项目7.2…

凸函数与深度学习调参

问题1&#xff1a;如何区分凸问题和凹问题&#xff1f; 问题2&#xff1a;深度学习如何区分调参&#xff1f;

使用可视化工具kafkatool连接docker的kafka集群,查看消息内容和offset

1、下载kafkatool 下载地址Offset Explorer&#xff0c;下载对应系统的offset explorer 下载完&#xff0c;傻瓜安装即可&#xff08;建议放D盘&#xff09;&#xff0c;在开始菜单输入offset找到该应用打开 打开 2、连接kafka 点击File > add new connection Bootstrap…