码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 浏览器事件循环原理 —— 任务优先级


     系列文章目录

    • 第一章 浏览器事件循环原理 —— 浏览器进程模型
    • 第二章 浏览器事件循环原理 —— 渲染主线程如何工作?
    • 第三章 浏览器事件循环原理 —— 何为异步?
    • 第四章 浏览器事件循环原理 —— JS为何会阻碍渲染?


    文章目录

    系列文章目录

    文章目录

    前言

    总结


    前言

    该文章作用于 “web前端大师课” 的学习笔记,附上课程链接。


    任务有优先级吗

    任务没有优先级,在消息队列中先进先出,但消息队列是有优先级的

    根据 W3C 的最新解释

    • 每个任务都有⼀个任务类型,同⼀个类型的任务必须在⼀个队列,不同类型的任务可以分属于不同的队列。
    • 在⼀次事件循环中,浏览器可以根据实际情况从不同的队列中取出任务执⾏。

    • 浏览器必须准备好⼀个微队列,微队列中的任务优先所有其他任务执⾏。

    三大队列

    • 延时队列:⽤于存放计时器到达后的回调任务,优先级「中」
    • 交互队列:⽤于存放⽤户操作后产⽣的事件处理任务,优先级「⾼」
    • 微队列:⽤户存放需要最快执⾏的任务,优先级「最⾼」

    注:添加任务到微队列的主要⽅式主要是使⽤ Promise、MutationObserver


    总结

    任务在消息队列中,先进先出,没有优先级;但是消息队列有三大类,微队列、交互队列、延时队列,他们的优先级从高到低排列。微队列是每个浏览器必须准备好的一个消息队列,它的优先级是最高的;其次是交互队列,w3c官方认为,用户交互的事件要尽可能的及时反馈,所以他的优先级是除了微队列最高的;最后则是延时队列,一般setTimeout()等计时器的方法都放在这个队列中,但是他的优先级是最低的,这也是 js 中 setTimeout() 的计时不是精确的原因之一,会有一些偏差。

  • 相关阅读:
    GenICam GenTL 标准 ver1.5(2)
    【Websocket 第二篇】问题解惑
    生产者消费者模型
    2022.11.9 英语背诵
    linux-log系统日志输出等级
    C++入门必会--删数问题
    CentOS7常用命令整理
    网上智慧教育云vr实验室管理系统促进教学公平和普及
    【C++】C++基础知识(六)---函数
    我的创作纪念日
  • 原文地址:https://blog.csdn.net/weixin_52872413/article/details/134561340
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号