css spirites
graphQL
)defer
or async
标签达到低优先级, 避免阻塞主线程js
存放于 head 中media
设置非 all
),浏览器仍然会下载样式表,但是不会在渲染页面之前等待样式表的资源可用1
2
3
4
5
6
7
8
9
10
// jsx
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Caveat&display=swap"
media="none"
onLoad={(rel) => {
if (rel.currentTarget.media != 'all') {
rel.currentTarget.media = 'all'
}
}}>
</link>
DNS查找
,TCP握手
和TLS协商
之类的连接,从而消除了这些连接的往返延迟,并为用户节省了时间。1
2
3
4
5
// crossOrigin 设置 use-credentials 表示允许携带cookie信息
<link rel="preconnect" href="//fonts.googleapis.com" crossOrigin='use-credentials'/>
<link rel="preconnect" href="//hm.baidu.com" crossOrigin='use-credentials'/>
<link rel="preconnect" href="//p3.music.126.net" crossOrigin='use-credentials'/>
<link rel="preconnect" href="//m10.music.126.net" crossOrigin='use-credentials'/>
DNS
的解析,减少用户等待时间,提高用户体验。1
2
<link rel="dns-prefetch" href="//fonts.googleapis.com"/>
<link rel="dns-prefetch" href="//hm.baidu.com"/>
强缓存(按照优先级排序)
cache-control(HTTP/1.1中定义)
1
add_header Cache-Control max-age=3600;
设置 Cache-Control 则会覆盖
expires
设置
expires(HTTP/1.0中定义) expires 设置资源缓存的时间
1
2
# 设置一天后过期 s: 秒, m: 分, h: 时, d: 天
expires 1d;
协商缓存(按照优先级排序) 第一次请求数据时,服务器会返回缓存标识和数据资源,客户端会将缓存标识与数据保存在本地 第二次请求数据时,会将缓存标识发送给服务器,服务器根据标识判断,如果可以使用缓存,则返回304状态码,浏览器使用缓存的数据内容
If-None-Match
与被请求资源的标识一致时,则返回304,并从本地缓存获取资源,否则重新获取新数据模板 JS + 数据填充,减少访问量大的页面频繁的资源请求导致性能损耗
使用 ServiceWork 实现静态资源,网络请求,甚至在离线环境下的数据展示,提升用户体验
通过webpack, rollup 等打包工具实现 js, css 代码的压缩
tree shaking(树摇),摇掉不使用的代码,减少包体积(只支持 ES module)
1
2
margin: 15px 20px 12px 24px;
border-top: thin solid #000000;
1
2
3
4
5
6
7
8
# 开启gzip压缩
gzip on;
# 压缩类型
gzip_types text/css text/javascript application/javascript image/jpeg image/png image/gif;
# 超过1k以上压缩
gzip_min_length 1k;
# 等级1-9 9最小的压缩,传输最快 但是消耗cpu
gzip_comp_level 6;
离线包的目的是为了客户端本地快速加载网页,达到页面秒开效果,但是这种资源请求协议不是http协议,在接口请求的时候可能会有跨域问题(IOS中常会遇到)
接口数据在客户端做预加载请求,如客户端列表页点击访问详情页,详情页是 H5 ,通常情况下是整个 APP 的重要页面
如:
localStorge
中