当前位置: 首页 > web >正文

浅谈微前端沙箱机制

文章目录

    • 1 JavaScript隔离机制
      • 1.1 隔离方式
        • 1.1.1 快照沙箱(SnapshotSandbox)
        • 1.1.2 代理沙箱(ProxySandbox)
        • 1.1.3 LegacySandbox(过渡方案)
        • 1.1.4 基于iframe的沙箱
      • 1.2 边界处理
      • 1.3 方案对比
      • 1.4 局限性
    • 2 CSS隔离机制
      • 2.1 隔离方案
        • 2.1.1 工程化命名方案
        • 2.1.2 运行时隔离方案
        • 2.1.3 原生隔离方案
        • 2.1.4 CSS-in-JS
      • 2.2 技术对比
      • 2.3 局限性
    • 3 主流微框架实现对比
    • 4 局限及一些细节处理

近期文章

  • 实现篇:手把手打造一个番茄时钟
  • Vue3响应式原理那些事
  • 实现篇:二叉树遍历收藏版
  • Vue3开发常见性能问题知多少
  • Vue3组件常见通信方式你了解多少?
  • 实现篇:LRU算法的几种实现
  • 从底层视角看requestAnimationFrame的性能增强
  • Nginx Upstream了解一下
  • 实现篇:一文搞懂Promise是如何实现的
  • 一文搞懂 Markdown 文档规则

微前端的沙箱隔离机制是确保多个子应用在同一页面中独立运行的核心技术,主要通过JS隔离CSS隔离两大维度实现。以下是深入分析:

1 JavaScript隔离机制

1.1 隔离方式

1.1.1 快照沙箱(SnapshotSandbox)

原理是在子应用挂载时保存全局window的快照(浅拷贝),卸载时通过对比恢复初始状态,中间修改记录在modifyPropsMap中。

  • 仅支持单实例(同一时间仅运行一个子应用)。
  • 性能较差(需遍历window属性)。
  • 兼容低版本浏览器(如IE)的降级方案。

示例代码

class SnapshotSandbox {constructor() {this.windowSnapshot = {}; // 初始快照this.modifyPropsMap = {}; // 记录变更}activate() {for (const prop in window) {this.windowSnapshot[prop] = window[prop]; // 保存快照}Object.keys(this.modifyPropsMap).forEach(p => {window[p] = this.modifyPropsMap[p]; // 恢复子应用状态});}deactivate() {for (const prop in window) {if (window[prop] !== this.windowSnapshot[prop]) {this.modifyPropsMap[prop] = window[prop]; // 记录变更window[prop] = this.windowSnapshot[prop]; // 还原主应用状态
http://www.xdnf.cn/news/4564.html

相关文章:

  • 报表分析报告怎么写?零基础掌握报表分析三要素!
  • canal mysqltomysql增加同步的库操作
  • 96、数图求解(整数规划建模求解)
  • 分布式-Redis分布式锁
  • 如何用FastMCP快速开发自己的MCP Server?
  • 2024ccpc【上海+陕西】
  • Windows远程桌面实现之十七:基于浏览器的文件和目录传输(一)
  • 解决 win11 连接共享打印机,报错 0x00000709 问题
  • Analytics Service 对生产环境性能的影响
  • Spring-博客系统项目
  • 动态规划之回文串问题
  • 第7章-3 维护索引和表
  • 添加地形与自定义地形
  • HTML基础2-空元素,元素属性与页面的结构
  • livedata使用,完整的livedata的Demo
  • Spring 中org.springframework.core.Ordered接口的实战教学
  • 在 ESP-IDF 中使用 .a 静态库调用
  • 解析表观遗传学的工具——ChIP-seq(一)
  • 数据库即服务(DBaaS)领域的最新创新
  • 每日一道leetcode
  • SCADA|KingSCADA运行报错:加载实时库服务失败
  • git 入门使用教程
  • 全国通用Y1大型游乐设施修理作业证精选题
  • PTS-G5K13M RF Generator 5kW / 13MHz 射频电源User s Manual
  • Spring Boot 如何自动配置事务管理器?
  • 数据结构之线性表
  • 阿里云codeup以及本地gitclone+http
  • Mybatis标签使用 -association 绑定对象,collection 绑定集合
  • ROS第十三梯:RViz+Marker——自定义几何形状可视化
  • 深度学习模型的部署实践与Web框架选择