nextTick中的降级处理

nextTick 要优先使用PromiseMutationObserver 因为他俩属于微任务,会在执行栈空闲的时候立即执行,它的响应速度相比setTimeout会更快,因为无需等渲染。
而setImmediate和setTimeout属于宏任务,执行开始之前要等渲染,即task->渲染->task。

再就是浏览器兼容性问题,setTimeout所有浏览器都可以兼容,setImmediate是IE最新浏览器都可以兼容,

源码:

function nextTick(cb){//cb就是flushQueue
    callbacks.push(cb);
    //要异步属性这个callbacks 获取一个异步的方法
    //异步是分执行顺序的 会先执行(promise mutationObserver) setImmediate setTimeout
    let timerFunc = () =>{
        flushCallbacks();
    }
    if(Promise){
        return Promise.resolve().then(timerFunc);
    }
    if(MutationObserver){
       let observer = new MutationObserver(timerFunc);
       let textNode = document.createTextNode(1);
       observer.observe(textNode,{characterData:true});
       textNode.textContent(2);
       return;
    }
    if(setImmediate){
       return setImmediate(timerFunc)
    }
    setTimeout(timerFunc, 0);
}

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页