无界简单使用

文章探讨了微前端中利用requestIdleCallback进行预加载的底层原理,浏览器空闲时间的工作流程,以及React对requestIdleCallback的处理策略。同时介绍了MessageChannel在无界通信中的应用,包括通过window、props注入和event.bus实现跨组件通讯。
摘要由CSDN通过智能技术生成

微前端-wujie

预加载的底层原理

底层使用requestIdleCallback函数
window.requestIdleCallback()方法插入一个函数,这个函数将在浏览器空闲时期被调用,这使开发者能够再主事件循环上执行后台和低优先级工作,而不会影响延迟关键事件,如动画和输入响应,函数一般会按先进先调用的顺序执行(队列),然而,如果回调函数指定了执行超时事件timeout,则有可能为了再超时前执行函数而打乱顺序。可以再空闲回调函数中调用requestIdleCallback(),以便在下一次通过事件循环之前调度另一个回调

浏览器的空闲事件

FPS刷新频率
如果是60FPS 一秒替换60张照片
那一帧就是16.6ms
那这一帧浏览器做了什么呢
第一种情况
1.处理用户事件,就是event例如click,input,change等
2.执行定时器任务
3.执行requestAnimationFrame
4.执行dom的回流与重绘
5.计算更新图层的绘制指令
6.绘制指令合并主线程,如果有空闲时间会执行requestIdleCallback
第二种情况是没有任务执行
浏览器会有50ms空闲时间,这个时间段也会执行requestIdleCallback

react的fabe和requestIdleCallback

react相关人员调研 requestIdleCallback有机会是20ms执行的 这时用户就会觉得卡
所以进行了polyfill
react16使用 postMessage + requestAnimationFrame
为什么不使用setTimeout替换postMessage 因为setTimeout中的0是4ms 而postMessage是0延迟的
react18使用 MessageChannel 实现了 requestIdleCallback的polyfill

MessageChannel

最开始用作通讯

let {port1, port2} = new MessageChannel()

port1.start()
port2.start()
这样两个就可以通讯了
或者使用onmessage 会隐式开启start

port1.onmessage = function (e) {
	console.log('受到了port2的消息', e)
}
port2.onmessage = function (e) {
	console.log('收到了port1的消息',e)
}
port1.postMessage('你好')
port2.postMessage('hello')

e就是MessageChannel的实例

无界中的传参

1.无界的架构,子应用是存放在iframe的,既然是iframe就可以通过window进行通讯
主应用定义一个全局变量

var a = 'test'

子应用通过window.parent.a就可以访问到

const send = () => {
	console.log(alert(window.parent.a))
}

2.通过props给子应用注入参数

<WujieVue "props="{name: 'xxx', age: 18}" url="xxxx" name="vue3"></WujieVue>

子应用可以使用$wujie来获取

window.$wujie.props

3.event.bus
主应用通过bus监听

import {bus} from 'wujie'
bus.$on('vue3', (data) => {
	console.log(data)
})

子应用通过emit触发事件(反之也可以 主应用emit触发子应用on监听)

window.$wujie.bus.$emit('vue3', {name: 'xxx', age: 18})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_聪明勇敢有力气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值