美文网首页
我理解中的JS异步

我理解中的JS异步

作者: Crisyhuang | 来源:发表于2021-07-03 00:17 被阅读0次

温故而知新,有一段时间没复习基础知识,重新学习一下,又获得了新知识。
接下来会陆续推出 “我理解中的...” 系列,不断学习,不断更新脑海里对它们的认知~

  • 异步 - 起源

    • JS 是单线程语言,只能同时做一件事。
    • 遇到网络请求 ajax、定时任务 setTimeout 等需要等待的操作时,页面不能卡住,因此需要异步。
    • 异步不会阻塞代码执行,它是以回调 callback 函数的形式来实现。
  • 异步 - Event Loop

    • Event Loop,又称 事件循环 或 事件轮询,是异步回调的实现原理。
    • 通过以下步骤,结合图片,了解下 Event Loop 的大致过程:
      1. 同步代码,一行一行放在 Call Stack 执行;
      2. 遇到异步,会先“记录”到 Web APIs,等待时机(定时、网络请求等);
      3. 时机到了,Web APIs 的回调就会移动到 Callback Queue 中;
      4. 若 Call Stack 为空(即同步代码执行完),则 Event Loop 开始工作;
      5. 轮询查找 Callback Queue,若有,则移动到 Call Stack 执行;
      6. 然后,Event Loop 继续轮询查找
event_loop_simple.jpg
  • 异步 - DOM 渲染 -> Event Loop

    • 浏览器中,因为 JS 具备修改 DOM 结构的能力,所以 JS 和 DOM 渲染需要共用一个线程。进而,能触发 DOM 渲染的 DOM 事件也应该是异步,使用基于 Event Loop 的回调来实现。
    • DOM 渲染 -> Event Loop 的步骤如下:
      1. 每次 Call Stack 清空(即每次轮询结束),同步任务执行完;
      2. 都是 DOM 重新渲染的机会,DOM 结构如有变化则需重新渲染
      3. 然后再去触发下一次 Event Loop
  • 异步 - 微任务 -> DOM 渲染 -> Event Loop -> 宏任务

    • 宏任务:
      • 指 setTimeout, setInterval, Ajax, DOM 事件
      • 在 DOM 渲染后触发
      • 由浏览器规定的,存放在 Callback Queue 中
    • 微任务:
      • 指 Promise, async/await
      • 在 DOM 渲染前触发
      • 由 ES6 语法规定的,存放在 Micro Task Queue 中
    • 当最初的 Event Loop 加入了DOM 渲染、宏任务、微任务的概念,可以得出以下更为完整的 Event Loop 示意图。
event_loop_complex.jpg

以上,Bye ~^ _ ^~

相关文章

  • 我理解中的JS异步

    温故而知新,有一段时间没复习基础知识,重新学习一下,又获得了新知识。接下来会陆续推出 “我理解中的...” 系列,...

  • JS 异步理解

    一、异步 JS的异步:新开一个子线程,在主线程执行完之后,执行子线程, 第二个参数:时间,代表在子线程中等待执行的...

  • js异步的理解

    js的异步是基于事件驱动的,每一个异步任务完成线程池会有一个事件,js线程完成后,将这些线程池的事件取出执行。这里...

  • Node.js中的异步

    title: Node.js中的异步categories: techtags: 异步 Node.js 前言 写No...

  • jquery.form.js异步上传文件

    我理解的ajax异步上传文件其实就是基于原生input的文件上传,只不过使用了异步提交 html js

  • JS中的同步异步

    目录 1. 在JS中,什么是同步异步? 2. JS中常见的异步代码 1. 在JS中,什么是同步异步? 通俗解释一下...

  • 1-1作业参考答案

    模块一:函数式编程与 JS 异步编程、手写 Promise参考答案 简答题 一、谈谈你是如何理解 JS 异步编程的...

  • # JS运行机制及Event Loop

    了解js执行顺序及机制,更好的理解js特性,理顺代码中的一些异步操作 ? JavaScript是单线程的语言 Ev...

  • js中的同步和异步的理解

    你应该知道,javascript语言是一门“单线程”的语言,不像java语言,类继承Thread再来个thread...

  • Js知识点及刷题记录

    知识点:匿名函数,函数作用域,异步执行的理解 一,微信小程序中page页面里面的函数定义与js的差异js中: 而p...

网友评论

      本文标题:我理解中的JS异步

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