[toc]
#### 进程和线程
+ 程序
被cpu执行的代码,程序存储在磁盘上
+ 进程
在内存中运行的程序,cpu资源分配的最小单位
+ 线程
一个进程可以有多个线程,线程是cpu调度的最小单位
#### 浏览器包含哪些进程
每次打开一个tab,相当于创建了一个独立的浏览器进程
1. Browser进程:浏览器主进程
+ 负责浏览器的界面显示,用户交互,前进后退等
+ 负责各个页面的管理,创建和销毁
+ 网络资源的管理,下载
2. 浏览器渲染进程(浏览器内核进程)
+ 浏览器渲染进程内部是多线程的
+ 页面渲染,脚本执行,事件处理
3. 第三方插件进程:仅当插件使用时创建
4. GPU进程:最多一个,用于3D绘制
5. SharedWorker进程:webWorker属于渲染进程中的一个线程,是为当前tab进程解析js,而SahredWorker为所有的tab提供
#### 浏览器渲染进程
渲染进程是多线程的
1. GUI渲染线程
+ 渲染界面,解析html, css, 构建dom树和renderObject树,布局和绘制
+ 重绘和回流会触发渲染线程
+ GUI渲染线程和js引擎线程是互斥的,当js引擎执行时,gui线程会被挂起,gui更新会被保存在一个队列里,等到js引擎空闲时执行
2. JS引擎线程
+ 也称js内核,处理javascripts脚本程序, v8引擎
+ 负责解析javascript脚本,运行代码
+ 一个tab页中永远只有一个js线程在运行js程序
+ js引擎线程会造成gui渲染线程的挂起,阻塞加载
3. 事件触发线程
+ 归属于浏览器,而不是js引擎,用来控制事件循环
+ 当js引擎执行代码块,如setTimeOut,鼠标点击,ajax异步请求时,会将对应的任务添加到事件线程中
+ 当对应的事件符合触发条件时,会被事件线程添加到待处理队列的队尾,等待js引擎的处理
4. 定时器线程
+ setInterval和setTimeout所在线程
+ js引擎解析到setTimeout的时候,会交给定时器线程处理,等到计时完毕后,添加到事件队列中
5. 异步http请求线程
+ 在XMLHttpRequest在连接后通过浏览器新开了一个线程请求
+ 检测到状态变更时,如果存在回调函数,异步线程就会产生状态变更事件,将这个回调函数放到事件队列中。再有js引擎执行
6. WebWorker线程
#### GUI渲染线程和JS引擎线程为什么互斥?
由于js可以操作dom,如果修改dom的同时渲染界面,那么有可能出现渲染线程前后获得的元素数据不一致
#### WebWorker
+ js引擎向浏览器申请开一个子线程(worker线程)执行js文件,这个子线程不是js引擎线程,所以不能操作dom
+ js引擎线程与worker线程通过postMessage API通信,worker线程不会阻塞js引擎主线程,也不会阻塞GUI线程,所以不会阻塞dom和js
#### 浏览器渲染流程-renderer进程/渲染进程
1.解析html,构建dom树
2.解析css,结合dom树构建render树
3.布局render树,计算元素的尺寸和位置 layout
4.绘制render树,绘制页面像素信息 painting
5.浏览器将各层的信息发送给gpu,gpu将各层合成,显示在屏幕上
#### 普通图层和复合图层
absolute和fixed虽然可以脱离文档流,但任然属于默认复合层
硬件加速will-change,可以单独分配资源,会在上面添加一个新的复合图层,这个里面的变化不会影响外界的重绘重排
#### 从Event Loop谈js的运行机制
js引擎是单线程的,在执行过程中会遇到setTimeout,promise等异步异步任务
- JavaScript
- 1. DOM事件流
- 2. 模拟 new, Object create(), bind
- 5. 封装函数进行字符串驼峰命名的转换
- 6. 什么是promise
- 7. 判断一个数是否为数组
- 10. __proto__和prototype以及原型,原型链,构造函数
- 11. 继承
- 12. 闭包
- 13. 回调函数
- 14. var 和 let 区别
- 15. this、bind、call、apply
- 16.undefined和null的区别
- 17.内存泄漏
- 18.垃圾回收机制
- html css
- 1. 元素垂直水平居中
- 2. 清除浮动
- 3. bootstrap栅格系统
- 4. px rpx em rem vw 的区别
- 5. 两种盒子模型
- 6. 合集
- web类
- 1. html5的新特性以及理解(web标签语义化)
- 2. 什么是路由,关于前端路由和后端路由
- 3. 对优质代码的理解
- 4. cookie 和 sessionStorage和localStorage
- 5. 浏览器内核
- 6. http 状态码
- 7. href 和 src 的区别
- 8. link 和 @import 的区别
- 9. http 状态码
- 10. websocket
- 11. 浏览器解析url
- 12.http缓存
- vue
- 1.vue2和vue3有哪些区别
- 1. 对 mvvvm 的理解
- 2. mvvm的优缺点
- 3. 数据双向绑定的原理
- 4. 生命周期
- 5. 组件如何通信
- 6. computed和watch的区别
- 7. proxy 和 Object.defineProperty
- 8. 虚拟dom和 diff算法
- 9. 路由的嵌套与传参
- 10. 路由导航钩子
- 11. axios 的理解
- 12. vue自定义指令 diretive
- 13. diff 的实现
- 14. 实现一个简单的双向绑定
- 15. 为什么 data 是一个函数
- 题谱
- js
- 手写篇
- css
- vue
- react
- 算法
- 自我介绍
- 八股文
- 源项目地址
- 1.计算机网络
- 2.浏览器
- 3.html和css
- 4.javascript
- 6.typescript
- 7.vue
- 8.react
- 大厂面试
- 面试题大全
- 常见性能优化
- 面试实战
- 面试分析
- 押题
- 1.微前端在项目中的实际应用
- 2.性能优化
- vue相关
- 1.说一说HashRouter和HistoryRouter的区别和原理
- 无敌之路,牛客网面试题自测记录
- 前端基础
- 1.html
- 2.js基础
- 珠峰性能优化
- WebWorker
- url到渲染
- 浏览器加载机制
- 自我介绍1
- 手写题
- 1.compose
- 2.setTimeout模拟setInterval
- 3.手写数组拍平
- 4.手写promise.all
- 5.手写深拷贝
- webpack
- 实战