前端性能优化
网络优化
DNS预解析
HTML
<link rel="dns-prefetch" href="//yuchengkai.cn" />
优化请求策略
减少请求数量
- 合并
css
- 合并
JS
- 合并图片制作精灵图,或使用
base64
数据加载图片 - 请求节流:多次一样的请求缓存第一次请求,过期后再发起新请求
- 懒加载:部分资源可以在需要的时候再加载
- 合并
提高请求速度
- 图片,第三方库使用cdn加速
- 支持
http/2.0
减少请求数据量
- 压缩图片,使用
webp
等压缩效果更好的格式 - 服务端开启
Gzip
等压缩功能 - 优化
cookie
体积
- 压缩图片,使用
使用缓存
强缓存
expires
:HTTP/1.0
,特定事件后过期cache-control
:HTTP/1.0
,具体时间长度后过期
协商缓存
last-modefined
,etag
对资源做标记,浏览器在发现强缓存过期后携带标记向服务端请求,由服务端决定是否决定缓存。
HTML
优化
提高加载速度
- 样式在上,脚本在下,视觉上提速
- 预加载、预渲染指定地址页面
提高更新速度
- 避免使用
table
布局,table
布局容易发生重排
- 避免使用
提高体验
- 增加描述信息
- 使用语义化标签
- 使用
html5
新元素提高体验
css
优化
加载优化
- 避免使用
@import
:@import
的文件需要在当前css文件加载完毕后才会去加载,而浏览器会等待所有的css
加载完毕才开始渲染,就会导致@import
阻塞了页面。
- 避免使用
匹配优化
- 避免使用通配符
- 避免嵌套多层选择器
属性优化
- 使用
transform
属性而不是宽高、定位 - 添加设备特有属性如
ios
的scroll-behaviour:smooth
平滑滚动页面
- 使用
javascript
优化
优化dom操作
- 减少
js
的样式操作,交给css
处理 - 减少重绘重排
- 操作
dom
时应缓存dom
元素 dom
离线:新隐藏dom
(display:none
),再操作,最后重新显示。只触发两次重排- 缓存
dom
属性,获取某些dom
元素会导致重排
- 操作
- 使用
requestAnimationFrame
,使动画更流畅
- 减少
注意内存占用
- 小心使用闭包
注意计算消耗
- 重复使用的数据应该缓存起来而不是每次获取
数据读取:局部作用域使用变量缓存数据,而不是使用时调用
循环:
- 减少遍历的次数,完成目的后结束循环
- 避免在循环中做大量的运算
首屏优化
- 非关键文件进行异步加载或者懒加载
- 考虑服务端渲染
- 合理利用本地储存缓存数据
- 优化用户感知:使用骨架屏或者加载图,避免白屏