强缓存
所谓的强缓存就是在服务端的响应头上加上cache-control:max-age=100000,定义一个缓存时间,将一些几乎不会更新的包、依赖之类的存储在磁盘或者内存中,在定义时间内不回去触发新的请求,都是走缓存内的
协商缓存
没有匹配到强缓存,向服务端发起请求,服务端进行判断,上一次和这次请求之间是否发生过变化,发生过:正常进行200响应;没发生过:触发协商缓存; 具体的流程:服务端响应上次客户端的请求,会带一个last-modified 添加到头上,下一次请求客户端自动生成一个if-modified-since并携带上last-modified ,服务器判断如果带着if-modified-since 对比服务器资源最新修改时间与last-modified时间,如果一直就触发协商缓存,不一致就进行更新请求(Etag与if-no-match同理)
事件循环机制
- 当我们调用一个方法时候,js会生成一个执行环境(执行环境存在着这个私有作用域、上层作用域指向、参数等等),又由于js是单线程,同一时间只能执行一个方法,这些方法存在一个单独的地方(执行栈)
- 当一段脚本第一次执行的时候,js会解析这段代码,将其中的同步代码放在执行栈中,如果是个方法的话就会向执行栈中添加这个方法的执行环境,进入执行环境执行代码,全部执行完毕之后并返回结果,js退出执行环境,返回上一个执行环境,反复进行,直到所有代码执行完毕。
- 如果遇到异步代码(dom操作、ajax请求),不会一直等待结果返回,会将事件挂起,继续执行执行栈的任务,当异步事件返回结果会将事件添加到事件队列中,等待执行栈所有任务结束,主线程检查事件队列,取出第一个事件并把事件回调放进执行栈,执行其中的同步代码,如此反复,就叫事件循环
宏任务、微任务
异步任务之间也有不同,执行的先后也有区别,分为宏任务(macro)和微任务(micro)
宏任务:setTimeout、setInterval,ajax请求、dom操作
微任务:new Promise() new MutationObserver(),.nextTick
任务栈执行完毕时候先处理微任务中的队列,然后在处理宏任务队列,微任务在宏任务之前执行。
vue3 composition API
ES6新增的属性
let、const、箭头函数 、块级作用域、数组解构赋值、模板字符串、promise、proxy、class等等 数组新增方法:map、filter、some(判断)、reduce
检测数据类型的方式
- typeof
2、instanceof
instanceof 检测的是原型
3、constructor
当一个函数 F被定义时,JS引擎会为F添加 prototype 原型,然后再在 prototype上添加一个 constructor 属性,并让其指向 F 的引用
4、toString