性能优化分析-腾讯微证劵首页

2,043 阅读4分钟

前端性能优化实践

本文是以腾讯微证劵首页作为例子,利用性能分析工具收集页面性能数据,得出性能分析报告,以及如何通过性能数据衡量页面性能,并结合现有技术,给出性能优化方案。

主要从以下三个方面阐述:

  • 使用前端性能分析工具得出性能数据
  • 根据性能标准解读性能数据
  • 提出性能优化方案

使用前端性能分析工具得出性能数据

前端页面的性能分析,首页要监控页面,得到监控数据,才能有针对性的分析优化。那性能监控主要有两种形式,一种是合成监控,另一种是真实用户监控。真实用户监控往往还需要分析用户日志服务等等。本文主要介绍合成监控,以Google的 Lighthouse 工具生成报告以及再结合利用 Chrome Dev Tools 进行局部性能分析,最终给出性能优化方案。

Lighthouse 性能分析报告

腾讯微证劵首页在网页版打开使用Lighthouse 工具得到的性能数据如下图:

从图上可以看到总体性能94,可访问性17,最佳实践 86, seo:67,没有用到pwa,下面重点看下数据得出的具体来源。

performance

在性能这一部分,分为指标(mertics), 视图路径(view Trace),可选(OpportunitiesThese)。

指标(mertics)
  • 首次内容的渲染时长 (First Contentful Paint) 2.0s

    • 除了这个还有一个是首次渲染,并且这两个指标浏览器已经标准化,可用performance的 the Paint Timing API 获取。
  • 首次有效渲染时长 First Meaningful Paint 2.7s

    • 首屏渲染页面关键元素展示时间
  • Speed Index 2.5s

  • 首次cpu空闲时长 - First CPU Idle 3.3s

  • 可交互时间-Time to Interactive 3.3s

  • 输入延迟-Max Potential First Input Delay 180ms

BestPractices

这个是检测页面中有5个请求没有使用https请求,点开之后是发现是图片资源,这个是可以忽略的,并且图片最好压缩使用。 在性能优化中有一条是减少http 情况,目前来说HTTP2 可以实现请求多路复用,减少了建立tcp连接的开销,头部压缩(HPACK算法), 服务端推送等,可以有效提升性能。

首页看到是没有使用PWA, 可以使用Google 的Workbox 利用SW的服务可以处理网络请求,管理缓存等,提升性能,具体实践步骤可以看我之前有写的一篇文章-Workbox :Service Worker 初尝试

有关seo 方面给出的提示是没有title, img 元素没有使用alt 属性,还有页面没有使用meta(提供页面的信息和指示以及移动适配等)

Chrome Dev Tools 计算性能指标

除了使用 Lighthouse 可以拿到一个整体的性能数据,同样也可以使用 Chrome Dev Tools 计算性能指标,拿几个主要的具体来查看。

  • Network : 页面中各种资源请求的情况,这里能看到资源的名称、状态、使用的协议 (http1/http2/quic...)、资源类型、资源大小、资源时间线等情况
  • Performance : 页面各项性能指标的火焰图,这里能看到白屏时间、FPS、资源加载时间线、longtask、内存变化曲线等等信息

首先看白屏时间和网络加载时间如上图:白屏时间约为30ms,从网络资源加载看,没有启用http2, 然后,我们从火焰图来分析具体函数耗时情况来看,基本上首页是函数处理发费了比较长的时间,可以考虑预先拉取,或者服务端直出ssr 方案。

性能标准以及优化方案

性能标准

从以上工具分析,并根据通用性能指标选取几个关键指标如下:

  • 页面加载时长

    • 白屏时长:domLoading- fetchStart
    • request时长 : responseEnd - resppnseStart
    • domReady 时长: domContentLoadedEventEnd - domContentLoadedEventStart
    • onLoad: loadEventEnd- loadEventStart
  • 首次内容的渲染时长 (First Contentful Paint) 2.0s

    • 除了这个还有一个是首次渲染,并且这两个指标浏览器已经标准化,可用performance的 the Paint Timing API 获取。
  • 首次有效渲染时长 First Meaningful Paint 2.7s

    • 首屏渲染页面关键元素展示时间

优化方案

根据以上指标,yahoo性能优化建议(以及代码优化方面),以及目前前端技术的发展可从以下几个方面进行优化:

  • 尽量减少首页渲染资源(主要是上图中函数处理)

    • 一方面可对资源区分首屏资源与非首屏资源,并实现按需加载
    • 可服务端直出ssr 技术
  • 图片的优化-首屏图片的处理(Lighthouse 检测首屏很多图片,并分别发送请求)

    • 减少图片的请求
    • 首屏 ICON 图片内联处理
    • 合成雪碧图
    • 图片压缩处理
  • 减少请求,开启HTTP2

    • 二进制传输,更快
    • 复用网络请求
    • 头部压缩
    • 服务端可推送
  • 缓存处理