首页 > 其他 > 详细

页面的工作原理摘录

时间:2019-08-19 11:15:37      阅读:90      评论:0      收藏:0      [点我收藏+]

要让不同类型的任务在主线程中有条不紊地执行,这就需要有一个事件循环系统,用来负责接收、调度这些不同的事件。

 

浏览器运行时负责给引擎线程发送消息,只负责生产消息,不负责取消息。(发送什么消息,发到哪里)

 

我们所熟悉的引擎是chrome浏览器中和node.js中使用的V8引擎。

这个引擎主要由两个部分组成,内存堆和调用栈。(只负责取消息,不负责生产消息)

 

主线程:顺序执行,(遇到异步任务,注册函数,通过event loop线程通知相应的工作线程(如ajax,dom,setTimout等)),继续执行后面 

                                    等到工作线程完成了任务,eventloop线程会将消息添加到消息队列中

            线程上调用栈为空就执行消息队列中排在最前面的消息,依次执行

 

事件循环:就是主线程重复从消息队列中取消息、执行的过程

 

但是在ES6引入了promise后,产生了一个新的名词”微任务(microtask)“。微任务的执行顺序与之前我们所说的任务(我们可以称之为”宏任务“)

  • 一个线程中,事件循环是唯一的,但是任务队列可以拥有多个。
  • 任务队列又分为macro-task(宏任务)与micro-task(微任务),在最新标准中,它们被分别称为task与jobs。
  • 事件循环的顺序,决定了JavaScript代码的执行顺序。它从script(整体代码)开始第一次循环。之后全局上下文进入函数调用栈。直到调用栈清空(只剩全局),然后执行所有的micro-task。当所有可执行的micro-task执行完毕之后。循环再次从macro-task开始,找到其中一个任务队列执行完毕,然后再执行所有的micro-task,这样一直循环下去。
  • 其中每一个任务的执行,无论是macro-task还是micro-task,都是借助函数调用栈来完成

 

在某一个宏任务执行完后,在重新渲染与开始下一个宏任务之前,就会将在它执行期间产生的所有微任务都执行完毕(在渲染前)

页面的工作原理摘录

原文:https://www.cnblogs.com/cloudsu/p/11375663.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!