更新时间:2024-12-02 GMT+08:00
分享

开发概述

微前端简介

微前端是一种多个团队通过独立发布功能的方式来共同构建现代化web应用的技术手段及方法策略。子应用按照指南做微前端改造后,可以在硬件开发工具链平台云服务(CraftArts IPDCenter)中独立运行。

工作原理

微前端采用的无界方案,利用“iframe”来实现js沙箱能力,下面详细介绍:

  1. 应用加载机制和js沙箱机制

将子应用的js注入主应用同域的“iframe”中运行,“iframe”是一个原生的window沙箱,内部有完整的history和location接口,子应用实例instance运行在“iframe”中,路由也彻底和主应用解耦,可以直接在业务组件里面启动应用。

  1. 路由同步机制

“iframe”内部进行history.pushState,浏览器会自动的在joint session history中添加“iframe”session-history,浏览器的前进、后退在不做任何处理的情况就可以直接作用于子应用劫持“iframe”history.pushStatehistory.replaceState,就可以将子应用的url同步到主应用的“query”参数上,当刷新浏览器初始化“iframe”时,读回子应用的url并使用“iframe”history.replaceState进行同步。

  1. iframe连接机制和css沙箱机制

采用webcomponent来实现页面的样式隔离,会创建一个自定义元素,然后将子应用的完整结构渲染在内部子应用的实例instance在“iframe”内运行,dom在主应用容器下的webcomponent内,可以实现两者的互联。通过代理“iframe”的document到webcomponent,可以实现两者的互联。将document的查询类接口:“getElementsByTagName”“getElementsByClassName”“getElementsByName”“getElementById”“querySelector”“querySelectorAll”“head”“body”全部代理到webcomponent,这样instance和webcomponent就精准的链接起来。

当子应用发生切换,“iframe”保留下来,子应用的容器可能销毁,但webcomponent依然可以选择保留,这样等应用切换回来将webcomponent再挂载回容器上,子应用可以获得类似vue的“keep-alive”的能力。

  1. 通信机制

承载子应用的“iframe”和主应用是同域的,所以主、子应用天然就可以很好的进行通信,我们提供三种通信方式:

  • props注入机制

    子应用通过$wujie.props可以轻松拿到主应用注入的数据。

  • window.parent通信机制

    子应用“iframe”沙箱和主应用同源,子应用可以直接通过window.parent和主应用通信。

  • 去中心化的通信机制

    提供了EventBus实例,注入到主应用和子应用,所有的应用可以去中心化的进行通信。

相关文档