前端常见的线程与进程

常见的进程和线程有; 

进程:

1)browser进程,是浏览器的主进程,该进程只有一个,负责浏览器界面的显示,与用户交互,比如前进后退等

2)第三方插件进程,每种类型的插件都对应一个进程,当使用该插件时,才创建进程

3)GPU进程,这个进程也只有一个,用于3D绘制等

4)渲染进程,每一个tab页面都有一个渲染进程,而且互相之间是不影响的,主要用来渲染页面,进行脚本执行等。在这个进程中,还有界面渲染线程,js引擎线程,http请求线程。浏览器事件触发线程等

线程:

1)界面渲染线程:负责渲染浏览器界面,解析html,css,建立DOM树等,当我们修改了一些元素的颜色或者背景色,页面就会重绘,当我们修改元素的尺寸,页面就会回流,回流比重绘的成本要高。

2)Js引擎线程:负责解析js脚本,运行js代码,一个tab页面无论什么时候都只能有一个js线程在运行js程序,界面渲染线程与JS引擎线程是互斥的,浏览器渲染的时候遇到<script>标签,就会停止界面的渲染,然后js引擎线程开始工作,执行里面的js代码,等js执行完毕,js引擎线程停止工作,界面渲染经常继续渲染下面的内容。所以如果js执行时间太长就会造成页面卡顿的情况,浏览器之所以遇到script标签就先执行js代码,是因为js的内容可能会影响到dom树的结构,不至于发生页面混乱。

3)事件触发线程,用来控制事件循环,并且管理着一个事件队列。当js执行碰到事件绑定和一些异步操作(如AJAX异步请求等),会走事件触发线程,将对应的事件添加到对应的线程中,(比如定时器操作,便把定时器事件添加到定时器线程),等异步事件有了结果,再把他们的回调操作添加到事件队列,等待js引擎线程空闲时来处理。因为JS是单线程,所以这些待处理队列中的事件都得排队等待JS引擎处理

4)定时触发器线程,setInterval与setTimeout所在线程

5)异步http请求线程,当执行到一个http异步请求时,就把异步请求事件添加到异步请求线程,等收到响应,再把回调函数添加到事件队列,等待js引擎线程来执行


事件循环机制

JS分为同步任务和异步任务,同步任务都在主线程上执行,会形成一个执行栈,主线程之外,事件触发线程管理着一个任务队列,只要异步任务有了运行结果,就在任务队列之中放一个事件回调。一旦执行栈中的所有同步任务执行完毕,系统就会读取任务队列,将可以运行的异步任务添加到执行栈中,开始执行,这样反反复复就是我们所谓的事件循环(Event Loop)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值