Skip to content

性能优化

背景

思路

量化、监控、分析、优化、防退化

性能指标

  • 首屏(FCP、FP)、可交互时间(FID)、卡顿率、体积
  • LongTask:超过50ms
  • 卡顿率:LongTask/页面停留时间
  • 体积(带宽、直接影响首屏):主文档+外链资源总和。
  • 获取主文档资源信息:performance.getEntriesByType('navigation')
  • 获取子资源列表信息:Perform.getEntriesByType('resource')

监控

  • 全自动化:采集、日志存储、分析、入库、展示
  • 多维度分析:对比、多展现形式
  • 易用:快速配置、交互合理、报警监控

架构

img.png

具体优化

注意点

多指标对比,善用开源

搜索场景

  • 输入时装载预加载页面:用户在输入的时候,提前打开webview,webview通过preload进行预加载。
  • 根据预测的提示词预搜索,缓存页面。
  • 弊端:服务端能力浪费,浪费用户流量,需要根据网络或时段停用。
  • 自定义内容,进行强制渲染,比如列表页面第三个dom后,通过自定义标签让浏览器开始渲染。
  • 详情页预取,通过link的prefetch,使用策略如网络情况,可视范围。浏览器默认将预取设置为5分钟。

SSR优化

  • 根据可视区反解,当用户滑到指定可视区后才进行水合。通过IntersectionObserve API判断可视区。
  • 静态化,将纯展示的页面静态化,可以通过判断渲染框架有无生命周期逻辑判断。可以在卡片主导声明自定义属性ssrOnly跳过水合。静态化之后就不需要将CSR脚本再下发给用户了,也不用再水合了。

iframe优化

  • 通过iframe方式预加载落地页
  • iframe类型页面在webview会卡顿:webview是单进程架构;端到端的通信开销比较大(因为iframe内也会做解析、Navigation、鉴权、IPC)

体积优化

  • webp优化,图片请求链接不变,但是在图片的请求头Accept里面携带是否支持webp格式。使用CDN进行缓存这种转换。webp格式体积减少30%-70%,解码速度在低端机上解码速度才低。

日志丢失处理

借用Native能力,通过Native保证日志能发出。

防退化

  • 性能意识:方案设计纳入性能评估
  • 线下拦截:若预发布环境,性能指标明显退化(如体积),则阻塞流程
  • 监控报警:及时提示负责人

离线包

indexDB

PB鉴权

webview预加载