前端性能监控:从Lighthouse到Real User Monitoring

前端性能监控是确保Web应用程序提供良好用户体验的关键组成部分。Lighthouse 和 Real User Monitoring (RUM) 是两种不同的工具和技术,它们关注的焦点不同,但都对优化前端性能至关重要。

2500G计算机入门到高级架构师开发资料超级大礼包免费送!

Lighthouse

Lighthouse 是一个自动化工具,主要用于离线评估网页性能和质量。它通过模拟真实用户的行为来执行测试,提供审计报告,包括加载性能、最佳实践、可访问性、PWA(渐进式Web应用)特性和SEO等方面。Lighthouse 能够帮助开发者发现性能瓶颈并提供改进建议。

使用 Lighthouse 的基本步骤:

1. 在 Chrome 浏览器中:
打开开发者工具(快捷键 F12 或者右键点击页面,选择检查)。
导航到 Lighthouse 标签页(在 Audits 或 Performance 面板中)。
运行审计,Lighthouse 将生成一份详细的报告。

2. 通过 CLI:
安装 Lighthouse CLI(如果尚未安装):

     npm install -g lighthouse

3. 对网站运行 Lighthouse:

     lighthouse https://example.com --output=json --output-path=report.json
Lighthouse 报告中的关键指标:
  • First Contentful Paint (FCP): 页面首次绘制内容的时间。
  • Time to Interactive (TTI): 页面变得对用户交互响应的时间。
  • Speed Index: 衡量页面内容可视化的速度。
  • Largest Contentful Paint (LCP): 最大内容元素渲染完成的时间。
  • Cumulative Layout Shift (CLS): 页面加载过程中布局的不稳定性。

Real User Monitoring (RUM)

RUM 监控实际用户在生产环境中与网站的互动,收集实时性能数据。它收集的数据包括页面加载时间、资源加载时间、错误日志等,这些数据有助于识别性能问题和用户体验问题。

RUM 实施的一般步骤:
  1. 选择 RUM 工具:如 Google Analytics, New Relic, Datadog, 或 AppDynamics。
  2. 集成 SDK 或 JavaScript 代理:在网站的 或 标签中添加 RUM 供应商提供的 JavaScript 代码片段。
  3. 配置数据收集:设置要收集的性能指标和事件。
  4. 分析数据:在 RUM 平台的仪表板上查看和分析收集到的性能数据。
RUM 数据的关键指标:
  • Page Load Time:从用户请求页面到页面完全加载的时间。
  • Network Requests:页面加载过程中发出的HTTP请求的数量和时间。
  • Error Tracking:捕获和报告运行时错误。
  • User Flows:用户在网站上的导航路径。

结合使用 Lighthouse 和 RUM,开发者可以进行全面的前端性能监控,从开发阶段的静态评估到生产环境中的动态监控,确保网站在各种条件下的性能表现。

使用 Lighthouse 和 RUM 数据改进前端性能

1. 识别性能瓶颈
  • Lighthouse 报告会指出哪些指标低于推荐值,比如 LCP、FCP、TTI 或 CLS。
  • RUM 数据可以揭示用户实际遇到的延迟和错误,帮助定位问题。
2. 优化资源加载
  • 使用懒加载(lazy loading)策略,仅在需要时加载图片和其他非关键资源。
  • 利用预加载(preload)和预读取(prefetch)策略,提前加载重要资源。
  • 压缩和最小化 CSS、JavaScript 和 HTML 文件,减少传输大小。
3. 代码优化
  • 减少 DOM 节点数量,优化布局和样式计算。
  • 使用 Web Workers 分离计算密集型任务,避免阻塞主线程。
  • 优化图像格式,使用 WebP 或 AVIF 格式提高压缩效率。
4. 优化网络性能
  • 使用 CDN(内容分发网络)来缓存静态资源,减少延迟。
  • 利用 HTTP/2 的多路复用,减少连接次数。
  • 设置合理的缓存策略,利用浏览器缓存。
5. 异步加载和按需加载
  • 使用 async 或 defer 属性异步加载外部脚本,避免阻塞 DOM 解析。
  • 对于大型应用,考虑采用路由懒加载,只在用户导航到特定页面时加载相关模块。
6. 修复错误和异常
  • 根据 RUM 数据修复错误,确保用户体验流畅。
  • 实施健康检查,监控服务器和API的响应时间及错误率。
7. 用户体验优化
  • 根据 RUM 数据分析用户行为,优化页面布局和交互设计。
  • 优化首屏加载,确保用户在视觉上看到内容的速度更快。
8. A/B 测试和持续监控
  • 进行 A/B 测试,比较不同优化策略的效果。
  • 定期运行 Lighthouse 审计,持续监控性能变化。

可以使用 Lighthouse 的诊断和 RUM 的实时数据来持续优化前端性能,确保网站或应用提供出色的用户体验。同时,记住性能优化是一个持续的过程,需要定期评估和调整。

使用 Lighthouse 和 RUM 结合持续集成/持续部署 (CI/CD)

1. 集成 Lighthouse 到 CI/CD
  • 在 CI/CD 流程中运行自动化测试,包括 Lighthouse 审计。
  • 例如,在 GitHub Actions、Jenkins 或 CircleCI 中设置脚本,每次提交或部署时运行 Lighthouse。
  • 如果性能评分低于阈值,让构建失败,强制开发者解决性能问题。
2. 自动化性能报告
  • 使用工具(如 lighthouse-ci)生成性能报告,并将其存储在版本控制系统中。
  • 邮件通知团队成员关于性能下降的情况。
3. RUM 数据集成
  • 将 RUM 数据集成到监控工具,如 Grafana 或 Prometheus,以便实时可视化性能指标。
  • 设置警报,当关键性能指标超出预设阈值时自动通知团队。
4. 使用数据驱动决策
  • 分析 Lighthouse 和 RUM 数据,找出性能瓶颈和用户痛点。
  • 根据这些数据制定优化策略,优先处理影响最大的问题。
5. 代码审查
  • 在代码审查流程中,要求提交的代码必须通过 Lighthouse 的性能测试。
  • 这有助于确保新功能或修复不会引入性能问题。
6. 持续监控和反馈循环
  • 创建一个持续的反馈循环,确保性能优化是开发流程的一部分。
  • 定期审查性能指标,讨论可能的改进措施。

通过将 Lighthouse 和 RUM 数据整合到 CI/CD 流程中,你可以确保前端性能始终处于关注的焦点,而且随着代码库的增长和变化,性能不会退化。这不仅可以提高用户体验,还可以降低服务器成本,因为更快的页面加载意味着更少的资源消耗。

高级性能优化策略

1. Server-Side Rendering (SSR) 和预渲染 (Prerendering)
  • SSR 使服务器在客户端渲染之前生成完整的HTML,改善SEO和首屏加载速度。
  • Prerendering 为特定URL预先生成静态HTML,适用于SEO友好的静态页面。
2. Service Worker 和离线支持
  • 使用 Service Worker 缓存静态资源,实现离线访问和更快的回访速度。
  • 更新策略(如 SWR)确保缓存的资源是最新的。
3. Code Splitting 和 Tree Shaking
  • 使用 Webpack 或 Rollup 进行代码分割,仅在需要时加载特定模块。
  • Tree Shaking 优化去除未使用的代码,减小包体积。
4. 响应式图片和媒体
  • 使用 srcset 和 sizes 属性提供不同分辨率的图片,适应不同设备。
  • 使用 <picture> 标签或 object-fit CSS 属性优化图片显示。
5. WebAssembly 和 WASM 库
  • 对计算密集型任务,考虑使用 WebAssembly 提高性能。
  • 使用 WASM 库(如 Rust 或 C/C++ 库的绑定)代替 JavaScript。
6. 浏览器缓存策略
  • 使用 HTTP 响应头(如 Cache-Control 和 ETag)来控制缓存行为。
  • 使用 Service Worker 实现更复杂的缓存策略。
7. 性能预算
  • 设定性能指标目标,如 LCP、TTFB、CLS 等。
  • 当性能指标超出预算时,触发警报并采取行动。
8. 异步加载库和框架
  • 如果可能,延迟加载库和框架,直到它们真正需要时才引入。
  • 使用动态导入 (import() 函数) 实现按需加载。

通过这些高级策略,你可以进一步提升前端性能,特别是在处理复杂的应用和大量用户时。然而,需要注意的是,过度优化可能导致代码复杂性增加,因此在实施时要权衡利弊。始终以用户体验为中心,确保优化措施既有效又可持续。

2500G计算机入门到高级架构师开发资料超级大礼包免费送!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/632540.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

503 SERVICE_UNAVAILABLE “Unable to find instance for ***“的问题。

503 SERVICE_UNAVAILABLE "Unable to find instance for *****"问题 1. 问题描述 在完成网关微服务的配置后&#xff0c;网关能够被Nacos发现并正常运行&#xff0c;但是无法将请求转发到其他微服务。使用Postman进行请求时&#xff0c;返回503错误&#xff0c;而后…

Python程序设计 文件处理(二)

实验十二 文件处理 第1关&#xff1a;读取宋词文件&#xff0c;根据词人建立多个文件 读取wjcl/src/step1/宋词.txt文件&#xff0c; 注意&#xff1a;宋词文件的标题行的词牌和作者之间是全角空格&#xff08;" ")可复制该空格 在wjcl/src/step3/cr文件夹下根据每…

畅捷通TPlus keyEdit.aspx、KeyInfoList.aspx SQL注入漏洞复现

前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 一、产…

C++ 结构体内存对齐

定义了两个结构体 typedef struct Cmd {uint8_t ua;uint8_t ub;uint8_t uc;uint32_t ue; } Cmd_t;typedef struct Cmd_tag {uint8_t value;uint8_t data[1]; // 将 data 定义为指向 Cmd_t 结构体的指针 } tag_t;在实际使用中&#xff0c;看见前人的代码是&#xff0c;new 一块内…

KCNScrew Pack for mac v1.8(2024.05.15)激活版 序列号查询软件

KCNScrew Pack是一款Mac序列号查询软件&#xff0c;内置强大的序列号数据库。软件包含数千款软件序列号&#xff0c;基本上大多数常用软件你都可以找到相应的序列号。 KCNScrew Pack for mac v1.8(2024.05.15)激活版 序列号查询软件 主界面 打开KCNScrew可以看到如下的主界面&…

微信自主创建表单投票小程序源码系统 带充值刷礼物功能 附带源代码以及完整的安装部署教程

系统概述 本小程序实现的核心功能包括&#xff1a;用户注册登录、表单提交投票、查看投票结果、在线充值以及赠送礼物等。其中&#xff0c;投票表单可以根据实际需求进行自定义设置&#xff0c;满足不同类型的调查或评选活动。同时&#xff0c;通过引入第三方支付接口&#xf…

STM32_IIC通信

IIC通信 • I2C&#xff08;Inter IC Bus&#xff09;是由Philips公司开发的一种通用数据总线 • 两根通信线&#xff1a;SCL&#xff08;串行时钟线&#xff09;、SDA&#xff08;串行数据线&#xff09; • 同步&#xff0c;半双工 • 带数据应答 • 支持总线挂载多…

C 深入指针(4)

目录 一、字符指针变量 1 初始化 2 与字符串数组的区别 二、数组指针变量 1 初始化 2 二维数组传参本质 三、函数指针变量 1 初始化 2 用法 四、typedef关键字 五、函数指针数组 一、字符指针变量 1 初始化 //VS2022 x64 #include <stdio.h> int main() {…

STM32程序下载电路设计

一、背景介绍 使用STM32F103RCT6作为单片机主控芯片&#xff0c;在进行电路板设计过程中&#xff0c;需要预留程序下载接口&#xff0c;可以选择使用JLINK下载器下载程序。 二、设计过程 1、查看STM32F103RCT6的芯片手册&#xff0c;找到下载程序的引脚端口PA13和PA14&#x…

浏览器插件Video Speed Controller(视频倍速播放),与网页自身快捷键冲突/重复/叠加的解决办法

浏览器插件Video Speed Controller&#xff08;视频倍速播放&#xff09;&#xff0c;与网站自身快捷键冲突/重复/叠加的解决办法 插件介绍问题曾今尝试的办法今日发现插件列表中打开Video Speed Controller的设置设置页面翻到下面&#xff0c;打开实验性功能。将需要屏蔽的原网…

抖音小店有订单后怎么发货?实操分享!发货全流程来了

哈喽~我是电商月月 做无货源抖音小店的店铺在出单后怎么发货&#xff1f;今天我就来给大家解答这个问题&#xff0c;其中的注意事项新手商家可以收藏一下&#xff0c;避免犯错 抖音小店的商品出单后&#xff0c;商家在“管理中心-订单管理”页面就能看见所有待处理的订单 一…

IDEA中开发并部署运行WEB项目

IDEA中开发并部署运行WEB项目 1 WEB项目的标准结构2 WEB项目部署的方式3 IDEA中开发并部署运行WEB项目3.1 部署步骤3.2 IDEA关联本地Tomcat 4 IDEA创建web工程5 IDEA部署-运行web项目6 IDEA部署并运行项目的原理 1 WEB项目的标准结构 一个标准的可以用于发布的WEB项目标准结构如…

如何快速实现Java发送邮件功能?

如何使用JAVA发送邮件&#xff1f;&#xff08;不做过多文字解释&#xff0c;详细说明请看代码注释&#xff09; 一&#xff0c;引用相关pom二&#xff0c;实现代码&#xff08;代码参考图片内容&#xff09;三&#xff0c; 接收邮件 一&#xff0c;引用相关pom <dependency…

24长三角C题9页完整建模思路+可执行代码

比赛题目的完整版思路可执行代码数据参考论文都会在第一时间更新上传的&#xff0c;大家可以参考我往期的资料&#xff0c;所有的资料数据以及到最后更新的参考论文都是一次付费后续免费的。注意&#xff1a;&#xff08;建议先下单占坑&#xff0c;因为随着后续我们更新资料数…

信息安全相关内容

信息安全 安全防护体系 安全保护等级 安全防护策略 安全技术基础 安全防护体系 安全防护体系有7个等级 安全保护等级 安全保护等级有5个等级,从上到下是越来越安全的用户自主其实就是用户自己本身具有的相应的能力 安全防护策略 安全策略是对抗攻击的主要策略安全日志: …

Java Chassis 3:接口维度负载均衡

本文分享自华为云社区《Java Chassis 3技术解密&#xff1a;接口维度负载均衡》&#xff0c;作者&#xff1a; liubao68。 Java Chassis 3技术解密&#xff1a;接口维度负载均衡 在Java Chassis 3技术解密&#xff1a;负载均衡选择器中解密了Java Chassis 3负载均衡在解决性能…

社交媒体数据恢复:事秘达

社交软件-事秘达的数据恢复教程如下&#xff1a; 首先&#xff0c;你需要停止使用事秘达应用&#xff0c;以避免覆盖已经删除的数据。 接着&#xff0c;你需要连接你的手机到电脑上&#xff0c;并打开手机的USB调试功能。这可以让电脑读取你手机的数据。 下载并安装一个数据恢…

重生奇迹MU快速获取经验解析

重生奇迹MU觉醒卡级怎么办快速获取经验攻略&#xff0c;在游戏中卡级是玩家会遇到的情况之一&#xff0c;面对打不过的敌人和过不去的主线&#xff0c;想办法升级才是最主要的&#xff0c;游戏中有很多获取经验的途径。下面让我们一起来了解一下卡级后获取经验的攻略&#xff0…

PatterNodes 3 mac矢量图设计 ,色彩与图案的完美融合!

PatterNodes 3 for Mac是一款功能强大的矢量图形模式创建软件&#xff0c;专为Mac用户设计。它采用基于节点的界面&#xff0c;支持创建形状、线条、曲线或文本&#xff0c;以构建复杂的矢量图形模式。该软件还具备灵活的参数调整功能&#xff0c;允许用户实时预览结果并进行无…

PLCnext用三种方式去编写一个功能块

先前提到的基于eCLR&#xff0c;PLCnext可以通过几种高级语言编写功能块、函数、等等&#xff0c;今天我们来试一下利用IEC61131、C、C#去制作加法功能块。 1.准备工具 PLCnext Engineer & 1152 Simulator PLCnext Engineer是上位编程软件&#xff0c;免费&#xff0c;11…