关于javascript:关于javascript运行机制

要理解js运行机制,须要从浏览器说

浏览器是多过程的

每关上一个Tab页,就相当于创立了一个独立的浏览器过程

浏览器都蕴含哪些过程?

1.Browser过程:浏览器的主过程,只有一个(协调、主控)
2.插件过程
3.GPU过程
4.浏览器渲染过程(浏览器内核,页面渲染,脚本执行,事件处理等)

重点
咱们前端开发次要关注 渲染过程(例如webkit)

渲染过程是多线程的

🚗GUI渲染线程
负责解析HTML,CSS ,构建DOM树和RenderObject树,布局,绘制
🚗JS引擎线程(例如v8)
JS引擎线程负责解析Javascript

✔GUI渲染线程与JS引擎线程是互斥的
(因为这个特点,若js执行事件太长,就会造成页面渲染不顺畅,造成页面渲染阻塞,显示器60hz刷新,16ms每帧.16ms内要运行实现js和渲染实现)

🚗事件触发线程
1.这个线程不是webkit的,它是属于浏览器平台,它是事件循环
eventloop的重要外围
2.如果事件合乎触发条件,这个线程会把此对应工作退出事件队列(例如:鼠标点击,AJAX申请)
🚗定时触发器线程
1.setInterval与setTimeout所在线程
2.这2个计时器不是js引擎操作的
3.计时结束,增加到事件队列中
🚗http申请线程
1.在XMLHttpRequest在连贯后是通过浏览器新开一个线程申请
2.XMLHttpRequest对象上的回调函数,在状态变动时候,被放入事件队列

从EventLoop说到JS的运行机制

1.javascript是单线程
2.javascript的运行分为同步工作异步工作
3.同步工作在js的主线程执行
3.事件触发线程 治理着 工作队列

🧧 异步工作有了后果,事件触发线程就在工作队列中放一个事件,主线程同步工作执行结束后才去执行工作队列

宏工作和微工作

1.宏工作是每次执行栈执行的代码就是一个宏工作(包含每次从事件队列中获取一个事件回调并放到执行栈中执行)

2.微工作是在以后同步工作执行完结后立刻执行的工作

🧧 宏工作是定时触发器线程,http申请线程造的,宏工作是事件触发线程保护的.
🧧 微工作是S引擎线程操作的,微工作队列执行实现,才会去执行宏工作

上面这段来着MDN

之所以称之为 事件循环,是因为它常常依照相似如下的形式来被实现:

while (queue.waitForMessage()) {
  queue.processNextMessage();
}

queue.waitForMessage() 会同步地期待音讯达到(如果以后没有任何音讯期待被解决)

疯狂循环运行,期待音讯,去运行
这就是浏览器背地的事,搞不懂了

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理