什么是高并发
高并发是指在极短的时间内,大数量的用户同时访问同一API接口或者资源,造成极多的请求同时发起到服务器。
高并发的场景()
大部分的高并发是在后端进行处理的,然而在一些情况下,后端无法阻止用户的行为,就需要前端的配合,例如抢购、秒杀等用户活跃度较高的场景。
一个完整的 HTTP 请求需要经历 DNS 查找,TCP 握手,浏览器发出 HTTP 请求,服务器接收请求,服务器处理请求并发回响应,浏览器接收响应等过程。接下来看一个具体的例子帮助理解 HTTP :
一.首页数据缓存
? ? 1)多次请求的接口数据请放在全局 例如vuex? ?组件用的时候 判断vuex中有没有这个值 没有则调用 (vuex页面刷新会丢失)
? ? 2)如果不是加载页面就需要请求的接口请分离 例如多个tab 列表 or 弹框内如下拉框list数据接口。(应在点击的时候再去调用)
二.避免发送重复请求
?????1)在axios二次封装文件中提前定义一个map,在请求拦截器中把url+参数作为键存进去,在请求拦截器中判断是否存在,如果存在取消这次请求(注意:需要在响应拦截器中删除存进的数据)
? ? ?2)?防抖节流
三.图片处理
?????1)雪碧图:CSS雪碧图是以前非常流行的技术,把网站上的一些图片整合到一张单独的图片中,可以减少网站的HTTP请求数量,但是当整合图片比较大时,一次加载比较慢。随着字体图片、SVG图片的流行,该技术渐渐退出了历史舞台
? ? ?2)Base64:将图片的内容以Base64格式内嵌到HTML中,可以减少HTTP请求数量。但是,由于Base64编码用8位字符表示信息中的6个位,所以编码后大小大约比原始值扩大了 33%
? ? ?3)使用字体图标来代替图片
四.js 处理
?????1)少用location.reload()使用location.reload() 会刷新页面,刷新页面时页面所有资源(css,js,img等)会重新请求服务器。
? ? ?2)?合并脚本和样式表模块化的原则是好,便于开发,但是每个文件都会导致一个单独HTTP请求,将这些文件合并到一个文件中,即可减少HTTP请求的数量并缩短最终用户响应时间。在理想的情况下,一个页面应该使用不多于一个的脚本和样式表。
五.css处理
?????1)提取公共css
? ? ?2)合理的使用less/scss
? ? ?3)?尽量少用style属性,用class重绘比重排的效率高
? ? ?4)有动画效果的元素设置绝对定位和固定定位
? ? ?5) 权衡速度的平滑。比如实现一个动画,以1个像素为单位移动这样最平滑,但reflow就会过于频繁,CPU很快就会被完全占用。如果以3个像素为单位移动就会好很多。
? ? ?6)?减少不必要的dom层级,不要频繁操作dom
6. 避免高频刷新页面
给请求接口加上限定条件,若n秒内刷新页面只发起一次请求,减少刷新页面发起的请求数量。