当前位置: 首页 > 网络应用技术

Eventloop的旅行 - 是否微型任务导致页面阻塞

时间:2023-03-07 12:47:00 网络应用技术

  它是一种单个线程语言,也就是说,只能同时执行一个任务。浏览器环境中有许多异步任务,例如,事件回调,SetteMeTimeout和其他异步任务。这些任务执行时间不确定。。在满足某些条件后,将调用这些异步回调功能。因此,一组机制需要管理这些异步任务,以免阻止页面。这是机制

  实际上,这是一种连续阅读异步任务的机制。首先,他有一系列既定规则:

  以上是异步任务的分类。例如,它们的API也不同,例如:

  Create(Micro-mission)可用。

  创建(宏任务)是:,有一些IO事件等(RAF在这里是有争议的,但绝对不是微型任务)

  任务是在呼叫堆栈中执行的。什么样的任务一直是什么样的,一个任务不能中断。

  关于(Micro-征服)和(宏任务)说他们的执行顺序是不同的,这是Micro -Task的高优先级。但是,不同任务之间也有最重要的区别,即记录最重要在本文中-Micro-被启用将阻止页面的渲染,这会导致用户卡住。

  可以看出,直到(微征)队列的情况才能执行渲染。相关视频可以进一步探索事件周期

  我还对上述规则进行了演示验证。是的:演示跳跃。该演示实际上是在15秒内执行和创建的Micro -Macro宏任务。在此期间,单击页面进行交互,查看页面是否及时渲染。发现只有承诺会导致页面停药,也不会其他(基于此原因,我更喜欢RAF Law作为宏任务)。此外,Settimeout具有最低4毫秒的限制(第一次执行除外)。很容易理解为什么React Scheduler Scheduler使用Messagechanl来实现vue的下一步。因此,MessageChannel是一个 - 一体的通信。它不受4ms的限制,RAF受浏览器渲染频率(16.6ms)的限制。

  部分代码如下

  有不同的操作环境,例如浏览器,节点,网络工作者和其他环境,可提供提供异步任务的API。。

  原始:https://juejin.cn/post/709833489936269348