用户体验
除了之前我讲的技术功能实现和项目架构设计,最重要的就是人机交互中的用户体验。
用户界面、应用框架、工具链、编程语言等,都是为了用户体验服务的。
用户体验广义上可以分为性能、UI 设计、可访问性、个性化。
下面我以性能为例来说明下如何提高用户体验。
性能分析
我们可以打开 google 的 Chrome devtools,查看 performance 分析页面性能。
比如从 render-blocking resources ,查看哪些资源阻塞页面渲染。
然后就是一些性能指标,比如:
- fcp:首次内容绘制,用户看到页面第一个元素的时刻
- lcp:最大内容绘制,页面完整呈现的时间
还有 火焰图 long task,main 栏火焰图中标红的函数调用,表示执行时间较长的函数 long task 。这样我们就可以定位到这些低性能代码进行优化。
页面加载时间太长
资源体积优化
-
减少产物大小
- 压缩(compression)
- 树摇(tree shaking)
- 依赖外置(external modules)
-
减少传输量
- 代码拆分(Code Splitting)
- 按需加载(lazy loading)
- 服务端渲染(SSR)
- react 服务器组件(RSC)
- 流式渲染(streaming rendering)
- 静态生成(静态展点生成(SSG)、增量静态生成(ISG))
网络延迟优化
- http / 2
- cdn
- 边缘计算
- 浏览器资源提示
- preload
- prefetch
- dns-prefetch
- preconnect
- 图片优化
- webp / avif
- 懒加载
- 预渲染缩略图
- 响应式图片(srcset)
缺少缓存
- 本地缓存
- http 缓存头(cache-control 、ETag 等)
- 浏览器本地存储
- service worker
- 远端缓存
- 内存缓存
- 边缘缓存
- API 网关
渲染受阻
- js 异步加载 (async 、defer)
- Web Worker
- Web Assembly
交互过程不流畅
海量的数据
- 长列表展示
- 分页
- 虚拟列表
- 大数据可视化
- 数据抽样
- 分片渲染
- canvas 渲染
- webgl 加速
大量的动画
- 开启 css 硬件加速
- transform
- opacity
- requestAnimationFrame
- 开源动效方案
频繁的交互
- js
- 防抖
- 节流
- 框架 react / vue
- v-show
- keep-alive
- useTransition
- useSDeferredValue
- useOptimistic
资源消耗过渡
- 不合理的资源加载
- 错误的构建设置
- 未经优化的静态资源(产物分析工具分析)
- 第三方库滥用
- 无效缓存
- 代码质量
- 只监听不卸载的事件处理器
- 长时间执行的同步代码
- 频繁的网络请求
上述来自:性能优化