我们的性能优化策略,也是基于这个问题,针对每⼀步依次解析
所谓性能优化,就是上⾯的步骤加⼀起,时间尽可能的短,所以基本也有两⼤⽅向
少加载⽂件
少执⾏代码
IP TCP HTTP的关系
IP负责找到
TCP 负责数据完整性和有序型, 三次握⼿,粘包 ,滑动窗⼝等机制( Vs udp)
http应⽤层,负责应⽤层数据,数据终⽌时机
优化策略:
HTTP
通过⽹络获取内容既速度缓慢⼜开销巨⼤。较⼤的响应需要在客户端与服务器之间进⾏多次往返通信,
这会延迟浏览器获得和处理内容的时间,还会增加访问者的流量费⽤。因此,缓存并重复利⽤之前获取
的资源的能⼒成为性能优化的⼀个关键⽅⾯。
⼴义的缓存,可以分为这四个 ,⼤家对httpcache应该都⽐较熟悉了
浏览器⼤佬: 需要获取main.js ,看下强缓存⾥有么有
expires: Wed, 11 Mar 2019 16:12:18 Mar GMT expires: Wed, 11 16:12:18 GMT
cache-control: max-age=31536000 // 1.1 精准 优先级⾼
Status Code: 200 (from disk cache)
如果强缓存失效了,需要执⾏协商缓存
1、 服务器⼩⽼弟。浏览器⼤佬需要main.js 这个⽂件上次修改
If-Modified-Since: Fri, 27 Oct 2017 06:35:57 GMT
2、 服务器: ⼩⽼弟,没改过,直接⽤缓存把,这次请求返回304 not Modified
如果有etag 类似⽂件的指纹,这个优先级更⾼ 因为更准确
ETag: W/"2aaa-129892f459"
If-None-Match: W/"2aaa-129892f459"
内存缓存,短命 ⽐如常⽤数据存js⾥,浏览器也有⾃⼰的策略, base64图⽚,体积⼩的静态资源
Service Worker 是⼀种独⽴于主线程之外的 Javascript 线程。它脱离于浏览器窗体,算是幕后⼯作,可以实现离线缓存,⽹络代理等
window.navigator.serviceWorker.register('/kaikeba.js').then(
function () {
console.log('注册成功')
console.log('注册成功')
}).catch(err => {
console.error("注册失败")
console.error("注册失败")
})
http2的缓存
分析⽂件⼤⼩
只引入需要的部分
图⽚通常是最占⽤流量的,PC端加载的平均图⽚⼤⼩时600K,简直⽐js打包后的⽂件还⼤了,所以针对 图⽚的优化,也是收益不错的
不同的场景,使⽤不同的⽂件⾥类型
jpg
- 有损压缩
- 体积⼩ 不⽀持透明
- ⽤于背景图,轮播图
png
- ⽆损压缩,质量⾼,⽀持透明
- ⾊彩线条更丰富,⼩图,⽐如logo,商品icon
svg
- ⽂本,体积⼩ ⽮量图
- 渲染成本,学习成本
图⽚打包雪碧图 减少http请求次数 webpack-spritesmith
accept-encoding:gzip 开启gzip
HTTP 压缩就是以缩⼩体积为⽬的,对 HTTP 内容进⾏重新编码的过程
Gzip 压缩背后的原理,是在⼀个⽂本⽂件中找出⼀些重复出现的字符串、临时替换它们,从⽽使整个⽂
件变⼩。根据这个原理,⽂件中代码的重复率越⾼,那么压缩的效率就越⾼,使⽤ Gzip 的收益也就越
⼤。反之亦然。
基本上来说,Gzip都是服务器⼲的活,⽐如nginx
cookie localstroage, sessionStroage,indexDB
CDN
简单理解是将组件或页面通过服务器生成html字符串,再发送到浏览器,最后将静态标记"混合"为客户端上完全交互的应用程序
如果是SPA ⾸屏SSR就是性能优化的重要⼀环
SSR常用框架
nuxt 和 next
vue服务端渲染
nuxt.js 服务端渲染框架体验
优点:
1.更快的响应速度
2.容易被爬虫爬到页面数据
缺点:
1.增加服务器压力
2.开发难度增大
3.可能会由于某些因素导致服务器端渲染的结果与浏览器端的结果不一致