demo1 setTimeOut
let time = 0
let nowTime = +new Date()
let timer
const poll = function(){
timer = setTimeout(()=>{
const lastTime = nowTime
nowTime = +new Date()
console.log( '递归setTimeout(fn,0)产生时间差:' , nowTime -lastTime )
poll()
},0)
time++
if(time === 20) clearTimeout(timer)
}
poll()
setTime递归调用超过5层,会导致时间差到5ms
demo2 MessageChannel
channel.port1.onmessage = function(){
/* 执行任务 */
scheduledHostCallback()
};
/* 向浏览器请求执行更新任务 */
requestHostCallback = function (callback) {
scheduledHostCallback = callback;
port.postMessage(null);
};
function cb () {
const lastTime = nowTime
nowTime = +new Date()
console.log( '递归MessageChannel(fn)产生时间差:' , nowTime -lastTime )
if (times < 20) {
console.log(times)
times++
requestHostCallback(cb)
}
}
requestHostCallback(cb)