1. 减少http请求
-
合并css文件 -
使用精灵图(也可以使用iconfont、base64等) -
懒加载 -
合理使用缓存
2. 减少操作dom
-
尽量不要直接操作dom(会触发重绘、重构),如果一定要操作,可以使用documentFlagment -
图片压缩、尺寸控制在2倍图或3倍图 -
如果要操作nodeList,需要转化成Array后再进行修改
3. css方向
-
css样式尽量使用简写 -
一些属性比较耗费性能,要慎重使用,比如:border-radius, box-shadow, filter, :nth-child -
link放在页面顶部,或者使用preload -
尽量用css替换图片(浏览器操作图片很耗性能)
4. js方向
-
慎重使用闭包、with语句(会造成内存泄漏)、eval(不能优化上下文) -
js文件放在页面底部,因为js文件会阻塞页面,也可以使用async|defer
5. cnd方向
-
增加cdn服务器 -
将资源放在多个cdn域名上,提高并行加载数量
6. Head缓存
-
使用expires、catch-control、etag、Last-Modified 缓存资源,可以有效减少请求,提升加载速度和用户体验
7. 交互优化
-
页面懒加载可以有效节省流量资源,提升用户体验 -
一些活动页面,可以使用图片预加载,在接口处理完后,提前加载未展示组件内部的图片 -
简化设计方案 -
页面滚动时,避免页面hover事件
8. http2优势
-
多路复用 -
二进制传输数据 -
head头压缩 -
直接将资源存到客户端缓存中
9. react 方面优化
-
memo -
pureComponent -
useMemo -
react-lazy -
react-loadable父组件更新时,也会触发子组件的更新(即使子组件的数据没有变化) 所以就有了 memo、useMemo 和 pureComponent,只有子组件依赖的数据变化了,才会触发子组件更新,或者使用shoudComponentUpdate自定义判断逻辑
memo、useMemo 和 pureComponent区别
-
useMemo 通过某个字段 判断副作用是否需要更新 -
pPureComponent针对类组件,React.memo针对函数式组件 -
React.memo可以传入第二个参数,props比较函数,自定义比较逻辑,PureComponent只会使用默认的props浅比较
react-lazy|react-loadable
-
react-lazy|react-loadable 处理router懒加载的中间件