美文网首页新前端时代
事件循环以及浏览器渲染时机

事件循环以及浏览器渲染时机

作者: W北落师门W | 来源:发表于2020-01-02 22:42 被阅读0次

事件循环机制(Event Loop)

我们知道JS是单线程的,这意味着在同一时刻,JS只会处理一件事情,但是我们在平时写前端代码时,总会杂糅着进行「处理事件」、「执行AJAX请求」、「调用API」等各种事情,这就依靠事件循环机制(Event Loop)来处理。主要的进行步骤,能查到的资料有很多,总结就是以下几步:

  1. 事件队列中取出一项「宏任务」进行处理;
  2. 检查「微任务」队列中是否有需要处理的「微任务」
    • 如果有「微任务」,逐一处理
    • 在此期间产生的「微任务」,放入「微任务队列」末尾
  3. 执行 UI 渲染
    • 判断是否需要渲染
      • 渲染只保证浏览器60Hz的刷新频率
      • 并非每次循环都会触发渲染
      • 触发resizescroll等事件
      • 执行css动画
      • 等等
    • 执行requestAnimationFrame
    • 执行IntersectionObserver callback
    • 渲染UI
  4. 如果「宏任务队列」为空,休眠直到一个「宏任务」出现
  5. 回到第一步

宏任务及微任务

哪些事件会触发「宏任务」及「微任务」呢?见下图:

image

宏任务

产生宏任务的主要来源有:

  1. DOM操作
  2. 监听事件回调(键盘、鼠标事件等)
  3. AJAX请求
  4. 调用浏览器API(如:history.back())
  5. setTimeout/setInterval
  6. 操作IndexDB

已上产生的事件,每次只会执行一件。

微任务

产生微任务的主要来源有:

  1. Promise.then、Promise.catch、Promise.finally
  2. MutationObserver
  3. Object.observe

「微任务队列」中的事件会逐一执行。

requestAnimationFrame

requestAnimationFrame的回调机制在不同的浏览器上不同,在EageSafari上会在UI渲染之后调用,在ChromeFirefox上会在UI渲染之前调用。

结语

已上记录了一些关于事件循环(Event Loop)以及浏览器渲染时机的知识点,关于事件循环(Event Loop)能搜索到很多的题目去练习,了解原理后可以结合题目作更深的理解。


参考

深入探究 eventloop 与浏览器渲染的时序问题

webappapis

【前端】事件原理讲解

事件循环:微任务和宏任务


博客地址 北落师门

相关文章

  • 事件循环以及浏览器渲染时机

    事件循环机制(Event Loop) 我们知道JS是单线程的,这意味着在同一时刻,JS只会处理一件事情,但是我们在...

  • 探索未知种族之osg类生物---呼吸分解之事件循环一

    事件循环和更新循环 终于到了我们嘴里经常念叨的事件循环、更新循环以及渲染循环了。首先我们来区分一下事件循环和渲染循...

  • 关于 JavaScript 事件循环 Event Loop 的一

    浏览器 JavaScript 执行流程以及在 Node.js 中都是基于事件循环的。 了解事件循环的工作原理对于正...

  • js 在浏览器的事件机制

    事件循环Event Loop:浏览器为了协调事件处理、脚本执行、网络请求和渲染等任务而制定的工作机制。 宏任务Ta...

  • js事件循环:微任务和宏任务

    浏览器JavaScript执行流程以及Node.js中的流程均基于事件循环。 了解事件循环的工作方式对于优化(有时...

  • 前端部分面试题整理

    (持续更新中) 1、js事件循环(vue.nextTick原理也差不多) 2、浏览器渲染流程 3、原型链 4、什么...

  • 整理

    内容 浏览器渲染 执行上下文 js 事件循环机制 this 作用域 new 原型 原型链 防抖&节流 闭包 深浅拷...

  • js事件循环

    1 js的事件循环 js 是一门单线程语言,为了协调事件,用户交互,脚本, UI渲染方面和网络处理等行为,浏览器引...

  • 事件循环机制

    事件循环:为了协调事件处理,脚本执行,网络请求和渲染任务而定制的 宏任务: 代表一个个离散,独立的工作单元。浏览器...

  • JS浏览器事件循环机制以及node事件循环机制

    js特性 单线程:只有一个主线程来处理任务 非阻塞:当执行异步任务时,不必等到结果返回,主线程会pending这个...

网友评论

    本文标题:事件循环以及浏览器渲染时机

    本文链接:https://www.haomeiwen.com/subject/afjaoctx.html