首页 > 其他分享 >性能优化实战,提升FP、FCP、LCP和TTI的终极策略

性能优化实战,提升FP、FCP、LCP和TTI的终极策略

时间:2024-12-04 15:28:04浏览次数:7  
标签:FP FCP LCP 性能 Paint 页面 优化 加载

Web性能优化实战:提升FP、FCP、LCP和TTI的全面优化策略

在现代Web开发中,性能优化是提升用户体验的关键因素。随着用户对加载速度的要求越来越高,Web开发者需要持续关注和优化页面加载的各个环节。为此,Google等公司提出了多个性能指标来帮助开发者衡量和优化页面的响应性和可用性,尤其是FP(First Paint)、FCP(First Contentful Paint)、LCP(Largest Contentful Paint)和TTI(Time to Interactive)四大指标,它们对用户体验有着深远的影响。

下面将通过一个电商网站的实战案例,结合项目背景、具体的优化措施以及性能测试数据,深入探讨如何通过优化这四个关键性能指标,提升网站的加载速度和交互性。

一、核心性能指标解析

在深入分析优化措施之前,我们首先来回顾一下四个关键性能指标的定义及其对用户体验的影响。

  1. First Paint(FP) :表示页面从空白到首次有颜色渲染的时间。虽然FP的出现标志着浏览器开始渲染页面,但它并不代表页面的实际内容已显示出来。
  2. First Contentful Paint(FCP) :表示页面上第一个有意义的内容(如文本、图片或SVG元素)被渲染的时间。FCP的时间较短,用户会感知到“页面正在加载”并可以开始理解页面结构。
  3. Largest Contentful Paint(LCP) :表示页面上最大、最重要的可视内容(如大图、主标题等)加载完成的时间。LCP直接影响用户对页面加载速度的感知,因此它是评估页面加载质量的核心指标。
  4. Time to Interactive(TTI) :表示页面完全交互可用的时间。即用户能够与页面开始交互的时刻,JavaScript加载并执行完成后,页面才具备完全的可交互性。

二、项目背景:电商网站首页的性能挑战

优化电商网站的一个首页。该首页包含以下主要元素:

  • 大头图:展示当前促销活动,图像大且影响LCP。
  • 产品列表:动态加载多个商品图像,可能导致FCP和LCP延迟。
  • 广告横幅:异步加载,可能影响页面的整体加载时长。
  • 导航条和JS交互:需要JavaScript执行后才能实现动态功能,影响TTI。
  • 用户评论模块:需要通过JavaScript异步加载并渲染,可能会延迟交互时间。

为了提升用户体验,我们的目标是通过优化以下关键点:

  • 提升页面的视觉反馈(FP和FCP)。
  • 优化页面核心内容的加载(LCP)。
  • 加快页面的交互性(TTI)。

三、优化策略

1. 提升FP与FCP:减少阻塞渲染

  • 内联关键CSS:我们将首屏所需的CSS直接嵌入HTML文件中,避免外部请求延迟页面渲染。这样,页面的首屏内容能够更快渲染出来,减少空白等待时间。
<style>
  body { margin: 0; font-family: Arial, sans-serif; }
  header { background-color: #333; color: #fff; padding: 10px; }
  /* 只保留渲染首屏所需的CSS */
</style>
  • 异步加载JavaScript:将非核心的JavaScript文件通过deferasync属性进行延迟加载,确保页面内容尽早渲染。
<!-- 异步加载非核心JavaScript -->
<script src="main.js" defer></script>
  • 懒加载图片与视频:将页面上的非首屏图片和视频使用懒加载方式加载,避免它们阻塞页面的首屏渲染。
<img src="hero-banner.jpg" loading="lazy" alt="Hero Banner">
  • 预加载关键资源:使用<link rel="preload">提前加载CSS、字体和JS文件,确保这些资源尽早准备好,避免影响页面首屏渲染。
<link rel="preload" href="styles.css" as="style">
<link rel="preload" href="core.js" as="script">

2. 优化LCP:优化核心内容的加载

  • 图片优化:针对电商页面的大头图(LCP元素),使用了WebP格式对图片进行优化,同时启用了懒加载。
<picture>
  <source srcset="hero-banner.webp" type="image/webp">
  <img src="hero-banner.jpg" alt="Hero Banner">
</picture>
  • 避免字体阻塞:通过font-display: swap确保页面加载时即使字体没有加载完成,也能显示内容,避免空白闪烁。
@font-face {
  font-family: 'Roboto';
  src: url('roboto.woff2') format('woff2');
  font-display: swap;
}

3. 优化TTI:提升页面交互性

  • 代码拆分与懒加载:使用Webpack对JavaScript进行拆分,仅按需加载页面所需的功能模块,避免一次性加载过多的代码,导致长时间阻塞主线程。
import('./product-gallery').then(module => {
  module.loadGallery();
});
  • 分割长任务:使用requestIdleCallbacksetTimeout将长任务分割成多个短任务,避免单次执行时间过长(大于50ms)而阻塞主线程。
requestIdleCallback(() => {
  // 执行较轻的后台任务
});
  • 使用Service Worker缓存:为静态资源添加缓存策略,减少网络请求次数,提升后续页面访问的加载速度。
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw.js').then((registration) => {
    console.log('Service Worker registered:', registration);
  }).catch((error) => {
    console.error('Service Worker registration failed:', error);
  });
}

四、优化效果测试

我们使用了 Google Lighthouse 和 WebPageTest 进行优化前后的性能对比测试,以下是数据结果:

优化前性能数据

性能指标优化前(初始)
First Paint (FP)2.5秒
First Contentful Paint (FCP)3.2秒
Largest Contentful Paint (LCP)6.0秒
Time to Interactive (TTI)9.0秒
总加载时间15.0秒
页面大小4MB
请求数量120

优化后性能数据

性能指标优化后
First Paint (FP)1.2秒
First Contentful Paint (FCP)1.8秒
Largest Contentful Paint (LCP)2.5秒
Time to Interactive (TTI)3.8秒
总加载时间6.5秒
页面大小2.2MB
请求数量70

Google Lighthouse 评分对比

指标优化前优化后
Performance50/10090/100
Accessibility85/10090/100
Best Practices70/10095/100
SEO90/10095/100

WebPageTest结果

测试项优化前 (Desktop)优化后 (Desktop)
First Byte Time1.6秒0.8秒
Start Render4.1秒2.1秒
Fully Loaded15.0秒6.5秒
Visual Complete6.0秒3.0秒

五、总结与展望

深度理解并优化FP、FCP、FMP、LCP和TTI对于提升页面加载性能、增强用户体验具有不可或缺的作用。每个指标不仅独立衡量页面的不同性能方面,还可以通过优化策略相互配合,最终提供更加流畅和快速的浏览体验。在技术细节和工具的帮助下,开发者能够针对具体问题做出精准的优化,实现最终用户的满意度和站点的性能双赢。

附:性能优化 面试25问!带答案 戳我领取

  1. script标签放在header里和放在body底部里有什么区别?
  2. 前端性能优化指标有哪些?怎么进行性能检测?
  3. SPA(单页应用)首屏加载速度慢怎么解决?
  4. 如果使用CSS提高页面性能?
  5. 怎么进行站点内的图片性能优化?
  6. 虚拟DOM一定更快吗?
  7. 有些框架不用虚拟dom,但是他们的性能也不错是为什么?
  8. 如果某个页面有几百个函数需要执行,可以怎么优化页面的性能?
  9. 讲-下png8、png16、png32的区别,并简单讲讲 png 的压缩原理
  10. 页面加载的过程中,JS文件是不是一定会阻塞 DOM 和 CSSOM 的构建?
  11. React,memo()和 useMemo()的用法是什么,有哪些区别?
  12. 导致页面加载白屏时间长的原因有哪些,怎么进行优化?
  13. 如果一个列表有 100000 个数据,这个该怎么进行展示?
  14. DNS 预解析是什么?怎么实现?
  15. 在 React 中可以做哪些性能优化?
  16. 浏览器为什么要请求并发数限制?
  17. 如何确定页面的可用性时间,什么是 Performance API?
  18. 谈谈对 window.requestAnimationFrame 的理解
  19. css加载会造成阻塞吗?
  20. 什么是内存泄漏?什么原因会导致呢?
  21. 如何用webpack来优化前端性能
  22. 说说常规的前端性能优化手段
  23. 什么是Css Sprites?
  24. CSS优化、提高性能的方法有哪些?
  25. script 标签中, async 和 defer 两个属性有什么用途和区别?

标签:FP,FCP,LCP,性能,Paint,页面,优化,加载
From: https://blog.csdn.net/2401_87546826/article/details/144211348

相关文章

  • 基于 FPGA 的一维卷积神经网络(1D-CNN)算法加速
    Q:大佬们,谁做过FPGA的一维卷积神经网络(1D-CNN)算法加速么?除了1D-CNN,还有哪些神经网络算法可以在FPGA上加速?A:以下是一个基于FPGA的一维卷积神经网络(1D-CNN)算法加速实现的案例,仅供参考:项目案例概述:该项目旨在通过FPGA实现1D-CNN的加速,以提高对一维序列数据的处理速度。......
  • 精橙FPGA,一个承接FPGA代码设计的资深工程师团队。
     一、我们是谁精橙FPGA,一个承接FPGA代码设计的资深工程师团队。二、服务内容面向在校学生、职场工程师等人员,提供FPGA入门指导和FPGA代码设计外包服务。三、业务范围主要提供Xilinx/Altera以及国产FPGA的入门指导和FPGA代码设计外包服务,包括但不限于以下内容:3.1FPGA入门......
  • SZFPGA ANLOGIC AL-LINK 下载器
    1.概述   ANLOGIC AL-LINK是用于国产FPGAANLOGIC安路的芯片编程设备。使用TD软件来下载烧录板载芯片。并且速度最大可以支持6Mb/s,极速完成下载和波形调试功能。相比USBCABLE速度更快,在大容量的FPGA更稳定烧录和调试。安路下载器接口定义:    2. 产品特点: ......
  • SZFPGA MIPI CSI IMX219的配套摄像头
    1.概述    国产FPGA是最近几年起来的产品,具有性价比高特点。而GOWIN属于国产FPGA成员,在技术服务和芯片价格都是比较大的优势,很多用户都用在LED控制,电机控制,PLC设备上,以及用于替换Lattice厂家中低端的芯片。    MIPI是移动联盟关键协议。用低功耗和高速传输摄像头和......
  • SZFPGA GOOWIN USB CABLE 下载器
     深圳市飞录科技有限公司www.szfpga.com1.概述    GOWINUSBCABLE是用于国产FPGAGOWIN高云的芯片编程设备。使用GowinProgrammer 软件来下载烧录板载芯片。本下载器特有的特点,能自动切换USB的AB通道,杜绝在WINDOWS10环境下,可能出现的波形无法调试问题。并且支持超低......
  • 用fpc trunk(3.3.1) 编译TMS FNC控件时出现INTERNAL 20231102
    由于fpc trunk一直在增强及调整,用不同时间段的fpc都可能存在兼容问题,如这次用fpctrunk(3.3.1)编译TMSFNC控件时出现Internal20231102,之前的能通过编译的。用最新的fpc编译LCLTMSFNCCorePkg.lpk时出现以下错误: 在fpc源码发现以下一段文字:如果使用泛型等复杂的情况下,locals......
  • 题解:CF1968G2 Division + LCP (hard version)
    https://www.luogu.com.cn/problem/CF1968G2CF1968G2Division+LCP(hardversion)题解前言这题可以\(O(n\sqrt{n}\logn)\)再各种优化做,算法是二分、哈希(不知道包不包含根号分治,但是有用到根号分治的思想)。如果读题解有些抽象的话可以看代码辅助理解。题意转化由于......
  • 解决mfplat.dll缺失问题的详细步骤与原因剖析
    在Windows操作系统中,mfplat.dll文件扮演着举足轻重的角色。作为MicrosoftMediaFoundation框架的核心组件,它负责多媒体内容的编码、解码和播放等关键功能。然而,当系统或应用程序提示“mfplat.dll文件缺失”时,用户可能会遭遇音频、视频播放故障,以及其他依赖MediaFoundation的......
  • FPGA(现场可编程门阵列)详解-ChatGPT4o作答
    FPGA(现场可编程门阵列)详解FPGA(Field-ProgrammableGateArray)是一种可编程的集成电路,其核心特性是通过硬件编程实现数字电路功能。它在设计灵活性、性能和并行处理能力方面有显著优势,是现代电子工程领域的重要技术之一。以下是对FPGA的全面详细介绍。1.什么是FPGA?FPGA......
  • 嵌入式硬件实战提升篇(二)PCB高速板设计 FPGA核心板带DDR3 PCB设计DDR全面解析
    引言:设计一款高速板,供读者学习,FPGA核心板,带一颗DDR3内存,FPGA型号:XC6SLX16-2FTG256C。随着嵌入式硬件技术的快速发展,高速板设计逐渐成为嵌入式系统设计中的核心技术之一。高速板的设计要求技术人员具备信号完整性、电源完整性及高频布线的综合能力,特别是在FPGA与高速存储器(如DD......