提高应用程序性能:优化核心 Web 指标

本文基于优化 Web 性能的实际经验,这里讨论的策略可以适用于面临类似挑战的各种 Web 应用程序。

作为事件智能 AI 平台的前端工程师,我面临着一个关键挑战:提高我们访问量最大的页面的性能。这次经历让我学到了关于优化核心 Web 指标和增强用户体验的宝贵经验。以下是我在这一过程中学到的东西。

了解核心网络要素:三大支柱

在深入研究具体优化之前,了解我们要衡量的内容至关重要。核心网络指标由 Google 用来评估用户体验的三个关键指标组成:

1. 最大内容绘制 (LCP):测量加载性能

  • 良好:≤2.5秒
  • 需要改进:≤4秒
  • 差:> 4 秒
  • 2. 首次输入延迟(FID):衡量交互性

  • 良好:≤100毫秒
  • 需要改进:≤300毫秒
  • 较差:> 300 毫秒
  • 3. 累积布局偏移 (CLS):测量视觉稳定性

  • 良好:≤0.1
  • 需要改进:≤0.25
  • 差:> 0.25
  • 我们的核心网络生命力报告将 URL 分为这三个状态组,帮助我们确定优化工作的优先顺序。

    技术深度探究:性能优化

    1.字体加载策略

    实施了全面的字体加载策略,其中包括多项技术优化:

    
    
    
    

    2.资源优化

    资源拦截是指控制网页加载不同资源(如脚本、样式表、图像、字体)的方式和时间,以提高性能。关键思想是拦截(延迟)非必要资源,同时优先处理关键资源。

    
    
    
    
    
    
    
    
    
    
    
    
    
    
     
    if (someCondition) {
      const script = document.createElement('script');
      script.src = '/feature.js';
      document.head.appendChild(script);
    }

    可衡量的结果

    以下是我们如何改进每个核心网络生命力以及实现的具体优化:

    1. 最大内容涂料(LCP)

    **之前**:4.2 秒(差)→ **之后**:2.1 秒(好)

    LCP 的显著改进源于几个关键问题的识别和修复:

  • 我们发现我们的英雄图像 (1.2MB) 阻碍了关键渲染路径。通过实施响应式图像和现代格式 (WebP/AVIF),我们将图像大小减少了 70%。
  • 将我们的网络字体移动到使用 font-display:optional 可以防止字体加载延迟。
  • 对关键资产实施预加载提示有助于对重要资源进行优先排序。
  • 2. 累积布局偏移(CLS)

    **之前**:0.28(差)→ **之后**:0.08(好)

    布局转变的大幅减少源于三个主要问题的解决:

  • 字体交换会导致显著变化。我们通过实施字体大小调整和匹配后备字体指标解决了此问题。
  • 动态内容加载(例如与会者列表)会将内容下推。我们实施了骨架屏幕并为动态内容保留了空间。
  • 3. 首次输入延迟(FID)

    **之前**:250 毫秒(需要改进)→ **之后**:85 毫秒(良好)

    交互性的提升来源于:

  • 分解阻塞主线程的长时间运行的 JavaScript 任务。我们使用 Chrome DevTools 中的“性能”面板识别这些任务。
  • 将繁重的计算(如过滤)转移到 Web Workers。
  • 实现适当的事件委托,而不是附加数百个单独的事件监听器。例如,使用 useCallback 来记忆事件处理程序
  • 其他重要改进

    1. 首次内容绘制(FCP)

  • 从 2.8 秒缩短至 1.4 秒
  • 通过内联关键 CSS 并推迟非关键样式来实现
  • 实现基于路由的代码分割,以减少初始 JavaScript 负载
  • 2. 总阻塞时间(TBT)

  • 从 600 毫秒减少到 200 毫秒
  • 通过推迟非关键 JavaScript 执行来实现
  • 针对非必要操作实现了 requestIdleCallback
  • 关键技术要点

    1. 策略性地实施资源提示

  • 对关键资源使用预加载
  • 实现稍后需要的资源的预取
  • 为第三方域启用预连接
  • 2.优化字体加载

  • 使用尺寸调整和公制覆盖
  • 实现后备字体匹配
  • 利用字体显示策略
  • 3. 持续监控绩效

  • 使用性能观察者 API
  • 实时追踪核心网络指标
  • 设置自动化绩效预算
  • 期待

    Web 性能优化是一个持续的过程。我们会持续监控核心 Web 指标并根据需要做出调整。我们对页面所做的改进不仅提升了用户体验,还有助于提高整个平台的参与度指标。