一行代码实现 nextTick
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);
}
};
参考资料
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 淘宝前端:移动端端图片的优化流程
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论