一行代码实现 nextTick - 文章教程

一行代码实现 nextTick

发布于 2021-11-25 字数 2049 浏览 952 评论 0

nextTick 来源于 NodeJS,意思是将当前的 callback 放到队列的尾部。

实现

/**
 * 下一刻
 * @param callback {Function} 回调
 */
var nextTick = function (callback) {
    setTimeout(callback);
};

众所周知,setTimeout 的超时时间是在当前队尾之后的 4ms+(具体待考证),得益于 MutationObserver 和 IE 的 onreadystatechange,可以实现更快的执行。

/**
 * 下一刻
 * @param callback {Function} 回调
 */
var nextTick = function (callback) {
    // chrome18+, safari6+, firefox14+,ie11+,opera15
    if (MutationObserver) {
        var observer = new MutationObserver(callback);
        var a = document.createElement('a');

        observer.observe(a, {
            attributes: true
        });
        a.setAttribute('a', String(Math.random()));
    }
    // ie
    else if ('VBArray' in window) {
        var script = document.createElement('script');
        // IE下这个通常只要 1 ms,而且没有副作用,不会发现请求
        script.onreadystatechange = function () {
            callback(); //在interactive阶段就触发
            script.onreadystatechange = null;
            document.body.removeChild(script);
            script = null;
        };

        document.body.appendChild(script);
    } else {
        setTimeout(callback, 0);
    }
};

参考资料

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

目前还没有任何评论,快来抢沙发吧!

关于作者

旧城烟雨

这个人比较懒,什么都没有填写!

1 文章
0 评论
356 人气
更多

推荐作者

qianbiandeboy

文章 0 评论 0

少女净妖师

文章 2 评论 0

zangqw

文章 0 评论 0

qq_7HKsl

文章 0 评论 0

伪装你

文章 1 评论 0