Webpack
}).then((res) => {
resolve(res.data)
}).catch(err => {
reject(err)
})
})
}
请求拦截器
在每个请求里加上token,统一处理维护方便
响应拦截器
在接收到响应后先做一层判断,比如状态码判断登录状态、授权
Webpack
再来一打Webpack面试题
Node
前端Node.js面试题
浏览器和网络
浏览器
浏览器概述
浏览器是一个多进程的架构,我们关心的是渲染进程(核心进程)。
为何使用多进程架构?
由于多个线程共享着相同的地址空间和资源,所以会存在线程之间有可能会恶意修改或者获取非授权数据等复杂的安全问题。
单进程浏览器:
1、不稳定。单进程中的插件、渲染线程崩溃导致整个浏览器崩溃。
2、不流畅。脚本(死循环)或插件会使浏览器卡顿。
3、不安全。插件和脚本可以获取到操作系统任意资源。
多进程浏览器:
2、解决不流畅。脚本阻塞当前页面渲染进程,不会影响到其他页面。
3、解决不安全。采用多进程架构使用沙箱。沙箱看成是操作系统给进程上来一把锁,沙箱的程序可以运行,但不能在硬盘上写入任何数据,也不能在敏感位置读取任何数据。
将渲染进程和OS隔离的这道墙就是安全沙箱。
作用:利用OS提供的安全技术,让渲染进程在执行过程中无法访问或修改OS中的数据,在渲染进程需要访问系统资源的时候,需通过浏览器内核实现,将访问结果通过IPC转发给渲染进程。
最小的保护单位是进程。单进程浏览器需要频繁访问或修改OS的数据,所以单进程浏览器无法被安全沙箱保护。
主要进程
浏览器是多进程的. 主要分为:
浏览器主进程
只有一个,控制页面的创建、销毁、网络资源管理、下载等, 同时提供存储等功能。
第三方插件进程
每一种类型的插件对应一个进程,仅当使用该插件时才创建。主要是负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响.
GPU进程
最多一个,用于3D绘制等,从浏览器进程中独立出来的。
浏览器渲染进程(浏览器内核)
每个Tab页对应一个进程,互不影响 , 核心任务是将HTML、CSS 和 JavaScript转换为可以与用户交互的网页。出于安全考虑,渲染进程都是运行在沙箱模式下。
网络进程
从浏览器进程中独立出来的, 主要负责页面的网络资源加载。
GUI 线程
负责渲染页面,解析 html、css;构建 DOM 树和渲染树;当界面需要重绘(Repaint)或由于某种操作引发回流 (reflow)时,该线程就会执行。在Javascript引擎运行脚本期间,GUI渲染线程都是处于挂起状态的,也就是说被”冻结”
了.
js 引擎线程
负责解析和执行 js 程序,我们经常听到的 chrome 的 v8 引擎就是跑在 js 引擎线程上的,其实语言没有单线程多线程之说,因为解释这个语言的是的线程是单线程;js 引擎线程与 gui 线程互斥,当浏览器执行 javaScript 程序的时
候,GUI 渲染线层会保存在一个队列当中;直到 js 程序执行完成,才会接着执行;如果 js 的执行时间过长,会影响页面的渲染不连贯,所有我们要尽量控制 js 的大小。
JS引擎线程和GUI渲染线程互斥!
为什么 setTimeout 不阻塞后面程序的运行,因为 setTimeout 不是由 js 引擎线程完成的,是由定时器触发线程完成的,所以它们可以同时进行,那么定时器触发线程在这定时任务完成之后会通知事件触发线程往任务队列里添加
事件。
事件触发线程
当一个事件被触发时该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理。这些事件可以是当前执行的代码块如定时任务、也可来自浏览器内核的其他线程如鼠标点击、AJAX异步请求等,但由于JS的单线程关系所有这些
事件都得排队等待JS引擎处理。
异步 HTTP 请求线程
在XMLHttpRequest在连接后是通过浏览器新开一个线程请求,将检测到状态变更时,如果设置有回调函数,异步线程就产生状态变更事件放到 JavaScript引擎的处理队列中等待处理。
异步场景
- 定时器
- 网络请求
- 事件绑定
- ES6 Promise
定时器
执行调用栈的代码,栈中为空时去检查任务队列,这是一个循环检查的过程,等到事件触发线程往任务队列中添加了定时器事件,这时再去检查已经有了定时器的异步任务,取出放进执行栈执行。
带来问题
定时任务可能不会按时执行。
应用场景
- 防抖节流
- 倒计时
- 动画(丢帧问题)
内核
浏览器内核是通过取得页面内容、整理信息、计算和组合最终输出可视化图像结果(渲染引擎)
每一个tab页面可以看作是浏览器内核进程,浏览器内核是多线程的。
常见浏览器内核
Trident内核:IE,360,搜狗等浏览器
Gecko内核:Netscape6及以上版本,Firefox
Blink内核:Opera7及以上
Webkit内核:Safari,Chrome
全站分卷索引 · 154 卷
- 1代码随想录知识星球精华(最强八股文)第五版(前端篇))
- 2html语义化
- 3src 和 href 的区别
- 4link 与 @import 的区别
- 5iframe
- 6CSS
- 7伪元素和伪类
- 8block,inline,inline-block
- 9重排、重绘和合成
- 10盒子模型
- 11margin 合并
- 12margin和padding 的值为百分比时
- 13浮动
- 14定位
- 15CSS选择器
- 16CSS选择器优先级
- 17选择器权重Specificity
- 18CSS属性继承
- 19不可/可继承属性
- 20display: none与 visibility: hidden的区别
- 21background-size
- 22client、offset&scroll
- 23CSS3新特性
- 24flex布局
- 25常见布局
- 26三栏布局
- 27垂直居中
- 28水平垂直居中
- 29CSS画三角形
- 30使chrome支持12px以下文字
- 31响应式布局
- 32媒体查询
- 33过渡与动画
- 34JavaScript 动画 和 CSS动画
- 35SCSS
- 36CSS性能优化
- 37有哪些数据类型
- 38判断数据类型
- 39类型转换
- 40parseInt&parseFloat
- 41浮点数求和步骤
- 42十进制小数转二进制
- 430.1+0.2 为什么不等于 0.3
- 44undefined 和 undeclared 的区别
- 45JavaScript NaN 属性
- 46isFinite()&isNaN()
- 47数组
- 48对原数组有影响
- 49对原数组无影响
- 50数组去重
- 51数组拍平
- 52ES6新增的数组方法
- 53判断是否存在某个值
- 54arguments为啥不是数组
- 55对象
- 56遍历对象的方法
- 57判断对象是否具有属性
- 58for in 和 for of 的区别
- 59继承方式
- 60instanceof
- 61深浅拷贝
- 62freeze属性
- 63函数
- 64函数柯里化
- 65函数的 length
- 66箭头函数和普通函数区别
- 67构造函数
- 68执行上下文
- 69作用域
- 70作用域和作用域链
- 71闭包和内存泄漏
- 72this
- 73关于 this 的指向问题
- 74改变this指向的方法(bind / call / apply)
- 75字符串
- 76DOM和事件
- 77哪些事件支持冒泡
- 78阻止冒泡
- 79HTMLCollection、NodeList
- 80dom.onclick 和 dom.addEventListener的区别
- 81e.target和e.currentTarget
- 82页面生命周期
- 83异步
- 84内存管理GC
- 85其它
- 86JavaScript 中日期时间格式转换
- 87input和object实现双向绑定
- 88JSON.stringify()
- 89escape、encodeURI&encodeURIComponent
- 90移动端滚动穿透和溢出
- 91ES6
- 92Map字典
- 93... 与rest
- 94proxy
- 95模块化
- 96Ajax、Fetch和Axios
- 97Webpack
- 98浏览器:事件循环
- 99浏览器内核
- 100浏览器同源策略
- 101输入URL回车后发生了什么
- 102HTTP
- 103HTTP 2.0
- 104浏览器存储
- 105鉴权
- 106Webstorage
- 107浏览器执行机制
- 108AST 抽象语法树
- 109性能优化
- 110CSS
- 111网络相关
- 112使用HTTP2.0
- 113图片
- 114CDN图片
- 115其他文件优化
- 116降低APP首页开屏渲染时间
- 117页面白屏
- 118HTTPS中间人攻击
- 119Web Worker
- 120Service Worker
- 121微前端
- 122Vue
- 123v-show 和 v-if 的区别
- 124双向数据绑定的原理
- 125Vue中的插槽使用
- 126Vue中的key
- 127Vue过滤器
- 128Vue中Scoped原理
- 129Vue中$nextTick的使用
- 130Vue中实现组件通信的方式
- 131Vue-router
- 132Vue路由传参
- 133前端路由
- 134Vuex
- 135虚拟DOM
- 136DIFF 算法
- 137Vue3和Vue2有哪些区别
- 138说一说你对React的理解
- 139React事件机制
- 140说一说你对react refs的理解
- 141react中key的作用
- 142组件开发
- 143有状态组件和无状态组件
- 144函数式组件和类组件的区别
- 145PureComponent&Component
- 146常见 Hooks
- 147状态管理
- 148redux toolkit
- 149React18新特性
- 150client中的createRoot取代以前的ReactDOM.render
- 151Suspense
- 152新的Hooks
- 153VDom一定更快吗
- 154Fiber