前端性能
用户输入URL到显示到网页发生了什么
前端的性能如何监测
性能优化小记
微信小程序Liberate: 小程序复用之前H5积累的库?
指标
1. 白屏时间: 用户从点击开始,到能看到页面有展现内容为止。
1. 老师的统计方式
2. 目前主流的方式
2. 首屏时间:用户看到了设备首屏幕,全部渲染完成
1. 老师的的统计方式
2. 新的统计方式
3. 用户可操作时间
4. 页面总下载时间
1. onload -serverGetTime
5. 80分位点
1. 80%的的性能
connectEnd: 1654435682722
connectStart: 1654435682722
domComplete: 1654435683227
domContentLoadedEventEnd: 1654435683043
domContentLoadedEventStart: 1654435683043
domInteractive: 1654435682840
domLoading: 1654435682782
domainLookupEnd: 1654435682722
domainLookupStart: 1654435682722
fetchStart: 1654435682722
loadEventEnd: 1654435683227
loadEventStart: 1654435683227
navigationStart: 1654435682658
redirectEnd: 1654435682722
redirectStart: 1654435682665
requestStart: 1654435682726
responseEnd: 1654435682776
responseStart: 1654435682774
secureConnectionStart: 0
unloadEventEnd: 0
unloadEventStart: 0
- network
74
性能优化
缓存: 不访问服务器直接访问本地
- cache-control :多少秒内缓存是有效的 >Expires, 浏览器站主导地位
- Expires:服务端站主导
Etag + if-None-Match(fllow)
service worker
self.addEventListener('install',event)
chahe:https://developer.mozilla.org/zh-CN/docs/Web/API/Cache
event.waitUntil(
caches.open(chchesDir)
.then(cahe =>{
const resouceTask = staticAssets.map(uri)
})
)
app.shell
servereorker +app shell
前端性能优化基础
浏览器渲染过程
https://www.w3.org/TR/navigation-timing/
DNS详解
DNS 域名系统 将域名转换为IP
顶级域名 : baidu.com
域名资源记录
SOA
A 记录
CNAME 记录(别名记录)
NS记录: 用于返回保存下一级信息的服务器记录(服务器记录)
MX
IPv6主机记录(AAAA)
域名服务l器
域名解析t
用户主机----> 本地DNS--->Root Server(TLD Server, Name Servr)
TCP三次握手
image.png
image.png
前端开发高级调试
断点以及捕捉事件绑定
断点
寻找事件监听
DOM元素断点
Audits 和Chrome性能插件
Audits
performanceTracer
Page Speed
performance.timing
Timeline掌控帧渲染模式
网页动画能够做到每秒60帧
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
达到重绘但是不影响重排,并且能够让GPU 参与
image.png
image.png
image.png
3D view
性能优化启示录H5版
image.png
image.png
性能优化如何做
网络
CDN
- 是什么:内容分发网络是利用靠近每一位用户的服务器,更快,更可靠地将文件发送给用户分发网络
- CDN优点:
- 提速:会给用户指派较近,较顺畅的服务器节点,将数据传输给用户
- 低成本:服务器被放到不同地点,减少了互联的流量,也降低了带宽成本
- 高可用:当某个服务器故障时,自动调用邻近地区的服务器
- CDN回源
- 是什么: 浏览器访问CDN集群上静态文件时,文件缓存过期,直接穿透CDN集群而访问源站机器的行为
CDN 缓存: - 三级缓存:浏览器本地缓存,CDN边缘节点缓存,CDN源站缓存
- 缓存设置:缓存时间设置过短,CDN边缘节点经常缓存经常失效,导致频繁回流,增大了源站负载,访问也慢;缓存时间设置过长,文件更新慢,用户本地缓存不能及时的更新
- 不同静态资源类型缓存时间
-HTML: 3分钟- JS,CSS: 10分钟, 1天, 30天
CDN灰度发布
- JS,CSS: 10分钟, 1天, 30天
- 原理:在部分地区,部分地区的部分运营上优先发布静态资源,验证通过后,在进行全量发布
- 实施:
- 域名:域名方面,设置特殊VIP解析至要灰度的城市
- 运营商: 源站机器方面,给灰度的城市,运营商配置单独的源站机器;灰度城市运营商解析至这些特有机器上
DNS
- 定义:域名系统是将网站域名和IP地址相互映射的一个分布式数据库,能够更方便的访问互联网
- 客户端
- android:
- 支持HTTP/2, HTTP/2通过使用多路复用技术在一个单独的TCP连接上支持并发,通过在一个连接上一次性发送多个强求来发送或接收数据
- 连接池复用
- GZIP
- 响应缓存可以完全避免网络重复请求
- 如果服务器配置了多个IP地址,当第一个IP连接失败的时候,Okhttp会自动尝试下一个IP
- IOS:
- App 启动时,缓存所有可能用到的域名IP,同时异步处理,客户端无需得到缓存结果
- 如果Cache中有此域名的缓存,直接返回缓存的IP
- 如果缓存中没有此域名,则重新向 HTTPDNS Service进行申请,结果会在此回调中返回
- 浏览器:
- 浏览器并发数限制,分布设置成多个域名
- 户访问:Java PHP等API接口
- 页面和样式:HTML/js/css
- 图片:jpg,png, gif
- android:
减少Cookie
- 策略:主站首页设计白名单,定期删除白名单
- 好处: 减少页面间传输大小,对Cookie进行有效管理
减少HTTP请求数 - css sprite
- 图片使用DATA URI, Web Font
- JS/CSS 文件合并
- JS/CSS请求Combo
- 接口合并
- 接口存储LocalStorage
- 静态资源存储LocaStorage