聊聊js的异步
首先,聊异步,得先弄清楚为什么不用同步,用同步会有什么问题,我们先明确一点,js的执行是单线程的,因为它是运行在浏览器渲染主线程中的,而渲染主线程只有一个。
如果同步的话,那么来一个计时器就得等多少秒才能执行任务,然后才能去执行后面的代码,非常浪费时间,而且渲染主线程不仅仅是用来执行js的,还有很多其他的工作要做,比如解析html,css,计算样式,布局,处理图层,页面每秒刷新60次等等.....
如果说使用同步的话,这些任务都得卡在那里,就会给用户一种卡死的感觉,体验很不好。
所以需要采用异步的方式处理js代码。那么具体又是怎么操作的呢?这就涉及到了事件循环了。
阐述一下js的事件循环?
事件循环又叫消息循环,是浏览器渲染主线程的工作方式
过去把消息队列简单的分为宏任务和微任务队列两种,但是这种说法已经无法满足这么复杂的浏览器环境,取而代之的是另一种更加灵活多变的处理方式
根据W3C官方的解释,每个任务有不同的类型,同类型的任务必须在同一个队列,不同类型的任务可以属于不同的队列,不同任务队列有不同的优先级,在一次事件循环中,由浏览器自己决定去取哪一个队列的任务去执行,但是呢,浏览器必须要有一个微任务队列,并且该队列的优先级是最高的,必须最先调度执行
事件循环是异步的实现方式
单线程是异步产生的原因
网友评论