前端开发项目性能瓶颈分析

1. 使用 rollup-plugin-visualizer 分析构建

借助 rollup-plugin-visualizer 插件,可以分析通过 rollup 构建出的产物内容,并生成可视化图表,帮助你分析打包后的文件大小以及各个模块的占用情况。

1.1. 安装插件

你需要在你的项目中安装 rollup-plugin-visualizer:

npm install --save-dev rollup-plugin-visualizer

1.2. 配置插件

在 Rollup 的配置文件(如 rollup.config.js)中引入并配置 visualizer 插件。

// rollup.config.js
import { defineConfig } from 'rollup'
import visualizer from 'rollup-plugin-visualizer'export default defineConfig({input: 'src/main.js',output: {file: 'dist/bundle.js',format: 'es',},plugins: [// 其他插件...visualizer({filename: './dist/stats.html', // 输出文件路径open: true, // 构建完成后自动打开浏览器template: 'treemap' // 图表类型 (sunburst, treemap, network)})]
})

1.3. 运行构建命令

运行 Rollup 构建命令来生成构建文件和可视化报告:

npx rollup -c

这将生成一个 stats.html 文件并自动在浏览器中打开(取决于配置)。

1.4. 分析输出报告

打开生成的 stats.html 文件,你会看到一个可视化图表,显示了每个模块的大小和在最终打包文件中的占用比例。这些信息可以帮助你识别出哪些模块占用了过多的空间,进而优化你的项目(如移除未使用的库、按需加载等)。

2. 使用 React DevTools 进行分析

使用 React DevTools 进行分析是调试和优化 React 应用程序的重要工具。React DevTools 是一个浏览器扩展,允许开发者在运行时检查 React 组件的结构、查看组件的状态和属性、分析性能等。以下是详细的使用步骤:

2.1. 安装 React DevTools

React DevTools 可以在 Chrome、Firefox 和其他支持扩展的浏览器中使用。安装步骤如下:

  • Chrome 浏览器:访问 Chrome 网上应用店 搜索 "React Developer Tools" 并安装。

  • Firefox 浏览器:访问 Firefox 附加组件页面 搜索 "React Developer Tools" 并安装。

  • 安装完成后,浏览器右上角会出现 React 的图标,表示安装成功。

2.2. 打开 React DevTools

1. 打开浏览器的开发者工具(快捷键F12 或 Ctrl+Shift+I)。

2. 在开发者工具,找到 "Components" 和 "Profiler" 这两个新选项卡。这些是 React DevTools 的主要功能。

2.3. 使用 Components 面板

Components 面板 允许你查看 React 组件的层次结构、查看每个组件的 props 和 state,并检查组件的 hooks。

  • 组件树:在左侧,您会看到应用程序的组件树结构,类似于 DOM 树。在组件树中,点击任意组件即可查看其详细信息。

  • Props 和 State:在右侧,可以查看当前选中组件的 props 和 state。可以直接在这里查看和修改组件的 props 或 state,方便调试。

  • Hooks:如果组件使用了 hooks,hooks 的状态也会在这里显示。点击 hooks 可以查看其内部状态。

2.4. 编辑 Props 和 State

React DevTools 提供了一些修改 props 和 state 的功能:

  • 双击想要修改的值(例如数字、字符串)即可编辑 props state。对于对象类型,点击展开后也可以直接编辑内部值。

  • 这些修改不会永久更改代码,而是只影响浏览器中当前运行的实例,适用于快速验证假设和调试。

2.5. 使用 Profiler 面板

Profiler 面板 用于性能分析,帮助找出哪些组件消耗了较多的渲染时间。

  • 开始和停止记录:点击 “Start profiling” 按钮来开始记录应用的性能数据。进行一些交互操作后,点击 “Stop profiling” 停止记录。

  • 分析渲染时间:停止记录后,您可以看到渲染的火焰图(Flamegraph)和排名图(Ranked),显示每个组件的渲染时间。

  • 查找性能瓶颈:可以查看每个组件的 “Render duration” 和 “Commit duration” 时间,找出渲染慢的组件。

  • 原因分析:Profiler 还会显示渲染的原因,如 props 改变、state 更新、强制更新等,这有助于理解组件更新的触发点。

2.6. 其他功能

  • Highlight Updates:可以启用组件更新高亮功能,帮助可视化了解哪些组件在重新渲染。

  • Debug Hooks:对于使用 hooks 的组件,可以通过 DevTools 查看 hooks 的状态和变化过程。

3. 使用 Vue Devtools 进行分析

3.1. 安装 Vue Devtools

你可以在 Chrome 网上应用商店或者 Firefox 附加组件页面上找到 Vue Devtools 插件进行安装。

  • Chrome 网上应用商店 - Vue Devtools

  • Firefox 附加组件 - Vue Devtools

3.2. 打开 Vue Devtools

打开开发者工具(F12 或右键菜单 > 检查),选择 Vue 选项卡。Vue Devtools 会显示应用中的组件树、Vuex 状态(如果使用了 Vuex)、事件等信息。

3.3. 进行组件分析

  • 组件树:可以查看组件的层级关系,选择一个组件会显示该组件的 Props、State、Computed 等信息。

  • 事件:可以查看事件的触发情况。

  • 性能分析:通过切换到 Performance 标签,你可以记录并分析应用的渲染时间。你可以点击 Start recording performance 按钮,然后与应用交互,完成后点击 Stop recording,Vue Devtools 会显示一个性能图表,显示每个组件的渲染时间。你可以识别出渲染时间较长的组件,从而优化性能。

3.4. Rerender 分析

在 Vue Devtools 的 Performance 选项卡中,可以看到应用的重新渲染(Rerender)次数。选择某个组件可以查看它的渲染详情,帮助你分析并减少不必要的重新渲染。

4. 使用 Performance 面板进行性能分析

使用 Chrome DevTools 的 Performance 面板进行性能分析是优化应用性能的关键步骤。以下是详细步骤和关键点,以帮助你更好地理解和使用 Performance 面板来分析应用的性能:

4.1. 打开 Performance 面板

1. 在 Chrome 浏览器中打开你的应用。

2. 按下 F12 或 Ctrl + Shift + I(Windows)/ Cmd + Option + I(Mac),打开 DevTools。

3. 点击“Performance”面板。

4.2. 录制性能数据

1. 点击 Performance 面板中的 “Record” 按钮(红色圆点)。

2. 在应用中执行你想分析的操作,如页面加载、组件渲染、用户交互等。

3. 完成操作后,点击 “Stop” 按钮停止录制。

4.3. 分析录制结果

录制完成后,Performance 面板会显示一段时间内的性能数据。关键部分包括:

  • Timings(时间线):展示了页面执行各类任务的时间,如脚本执行、样式计算、布局、绘制等。

  • Frames(帧):展示了页面渲染帧的速率。绿色表示帧率良好,黄色或红色表示帧率不佳。

  • Main(主线程):显示 JavaScript 代码在主线程的执行情况,帮助识别占用时间较长的任务。

  • GPU:展示 GPU 处理图形任务的时间,帮助识别 GPU 相关的性能瓶颈。

在使用 Chrome DevTools 的 Performance 工具分析应用时,了解每个指标的含义以及如何解读这些指标是优化性能的关键。以下是详细的查看指标、分析方法及相应的优化建议。

4.4. Performance 工具中的详细指标

1. Overview(概览图)

  • FPS(Frames Per Second):显示每秒渲染的帧数,理想情况下应接近 60 FPS。低于 30 FPS 表示页面出现卡顿。

  • CPU 使用率:展示 CPU 在每个时间段的使用情况,反映页面在主线程上的繁忙程度。

  • Net(网络请求):显示页面加载过程中网络请求的时序图,帮助识别长时间加载的资源。

2. Main(主线程)

  • 显示 JavaScript 的执行、样式计算、布局、绘制等任务在主线程上的时间分布。

  • 关注任务的长度和频率。主线程任务过长会导致页面的交互性降低。

3. Scripting(脚本执行)

  • 包括组件的渲染、状态更新和事件处理。脚本执行时间过长会显著影响应用的响应速度。

4. Rendering(渲染)

  • 包含浏览器对 DOM 元素的布局计算和样式应用。渲染时间过长通常是由复杂的 CSS 或频繁的布局变动引起的。

5. Painting(绘制)

  • 包括将元素的像素绘制到屏幕上的过程。绘制时间长表明页面可能包含复杂的图形或频繁的绘制操作。

6. Composite Layers(合成图层)

  • 浏览器将页面分为多个图层并合成,帮助优化渲染性能。合成图层过多或图层频繁更新会影响性能。

5. 使用 Lighthouse 进行性能和 SEO 分析

Lighthouse 是一个开源的自动化工具,用于提高网页质量,能够分析性能、可访问性、SEO、最佳实践等。

5.1. 打开 Lighthouse 面板

在 Chrome 中按 F12 打开开发者工具,选择 Lighthouse 选项卡。

5.2. 配置分析选项

选择要分析的内容(Performance、Accessibility、Best Practices、SEO、PWA)。根据需求勾选不同的选项。

5.3. 生成报告

点击 Generate report 按钮,Lighthouse 会在新标签页中加载并分析当前页面,生成一份详细的报告。

5.4. 分析报告

  • Performance: 提供了详细的性能指标(如加载时间、交互时间等)和优化建议。

  • Accessibility: 提供了可访问性问题的检测结果,并给出了相应的改进建议。

  • Best Practices: 检查网页的安全性、资源加载情况等。

  • SEO: 提供了针对搜索引擎优化的建议。

5.5. 根据建议进行优化

根据 Lighthouse 的优化建议,可以逐步改进页面性能和其他质量指标。

6. 使用 Memory 面板进行内存分析

Memory 面板用于分析网页的内存使用情况,帮助你找出内存泄漏和优化内存使用。

6.1. 打开 Memory 面板

在 Chrome 中按 F12 打开开发者工具,选择 Memory 选项卡。

6.2. 选择快照类型

  • Heap Snapshot: 拍摄堆快照,显示内存中对象的分布情况。适用于检测内存泄漏。

  • Allocation Instrumentation on Timeline: 显示内存分配情况,适用于查看内存分配频率。

  • Allocation Sampling: 采样内存分配数据,适用于了解哪些对象占用了内存。

6.3. 开始分析

选择合适的选项后,点击 Take snapshot 或 Start 按钮,开始收集内存数据。

6.4. 分析内存使用情况

  • 查看对象分布:通过查看堆快照,可以找到内存占用较大的对象或不再需要的对象。

  • 检测内存泄漏:比较多次快照,查找不必要的对象是否仍然存在(如 Event Listeners 未正确移除、未清理的定时器等)。

  • 优化内存使用:根据内存分析结果,优化对象的生命周期管理,释放不再需要的内存,避免内存泄漏。

7. 优化方法及策略

7.1. 优化 JavaScript 执行

  • 减少不必要的渲染:使用 React.memo、useMemo、useCallback 避免无意义的渲染。

  • 分解复杂任务:将复杂的函数拆分,避免长时间的脚本执行。可以使用 requestIdleCallback 延迟执行不紧急的任务。

  • 异步操作:使用 setTimeout 或 requestAnimationFrame 将非关键任务异步执行,保持主线程的空闲。

7.2. 优化渲染和布局

  • 减少布局抖动:使用 will-change CSS 属性提前通知浏览器可能的变动,减少重排。

  • 简化样式计算:避免使用复杂的 CSS 选择器和嵌套,减少浏览器的计算压力。

  • 优化动画:尽量使用 transform 和 opacity,这些属性的变动可以通过 GPU 加速,减少对主线程的影响。

7.3. 优化绘制和图层合成

  • 减少绘制区域:避免全局重绘。可以将动画或频繁更新的元素置于单独的图层,减少合成压力。

  • 使用硬件加速:通过 translateZ(0) 或 will-change 强制元素进入合成层,从而利用 GPU 加速。

  • 控制图层数量:合成图层过多会导致性能下降,尽量减少不必要的图层创建。

7.4. 网络优化

  • 资源加载优化:使用懒加载(lazy loading)、预加载(preloading)等手段优化资源加载时序。

  • 减少请求数量:合并 CSS 和 JavaScript 文件,压缩资源,减少请求的体积和数量。

  • 缓存策略:合理配置缓存头,提高资源的缓存利用率,减少网络请求。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ExoData.h - OpenExo

ExoData.h文件定位源代码1. 头文件依赖2. 核心类声明3. 主要成员函数关节遍历工具关节与配置相关数据/状态操作控制参数/校准4. 主要成员变量总结文件定位 位置:src/ExoData.h 作用:定义 ExoData 类,作为 Exo 系统全局数据的核心容器。它将设…

缓存HDC内容用于后续Direct2D绘制.

思路&#xff1a;把HDC里的内容保存到Direct2D格式的位图里&#xff0c;后续直接调用 renderTarget->DrawBitmap即可。本例中&#xff0c;位图将保存为类的字段。本例中 COM 接口指针皆使用 com_ptr&#xff0c;这是 WinRT 的 COM 智能指针类&#xff0c;com_ptr<I>::…

“抓了个寂寞”:一次实时信息采集的意外和修复

1. 那天下午&#xff0c;舆情系统“迟到”了 那天下午&#xff0c;公司运营那边突然在群里喊&#xff1a;“XX事件都快上热搜榜前十了&#xff0c;咱们系统咋没反应&#xff1f;” 我愣了几秒&#xff0c;立马翻后台日志、爬虫执行记录&#xff0c;结果一查&#xff0c;还真有点…

数据结构之迪杰斯特拉算法

前言&#xff1a;前面两篇文章介绍了生成图的最小生成树的算法&#xff0c;接下来两篇文章会介绍图的最短路径的算法&#xff0c;迪杰斯特拉算法和弗洛伊德算法。迪杰斯特拉算法是用来计算一个点到其他所有点的最短路径&#xff0c;这个点称之为源点。 一、实现流程 回忆一下…

技术文档 | OpenAI 的 Kafka 演进之路与 Pulsar 迁移潜力

导读ChatGPT 用户量指数级暴涨&#xff0c;OpenAI 的 Kafka 集群在一年内增长 20 倍至 30 个集群[1]&#xff0c;其 Kafka 架构面临日均千亿级消息&#xff08;峰值 QPS 800万/秒&#xff09; 的压力。这揭示了一个关键事实&#xff1a;OpenAI 的成功不只依赖模型&#xff0c;更…

【bug】 jetson上opencv无法录制h264本地视频

在Jetson Orin NX上无法使用opencv直接录制h264/h265视频流&#xff08;h264格式的视频流才能在浏览器播放&#xff09; 解决&#xff1a; 软件编码&#xff1a;需要源码编译opencv 1.环境准备 pip uninstall opencv-python sudo apt install build-essential cmake git python…

解决http的web服务中与https服务交互的问题

问题背景&#xff1a; 需要在一个http的web服务中直接跟另一个https服务交互&#xff0c;不经过自身后端。 又来到了熟悉的跨域访问问题。 解决逻辑就是使用nginx转发&#xff0c;涉及到的文件也就是nginx.conf文件&#xff0c;前面解决minio链接时已经有经验了&#xff0c;但…

网站访问信息追踪系统在安全与性能优化中的关键作用——网络安全—仙盟创梦IDE

<?php // 收集访问信息 $visitorInfo未来之窗 [timestamp > date(Y-m-d H:i:s),ip > $_SERVER[REMOTE_ADDR] ?? unknown,page > $_SERVER[REQUEST_URI] ?? unknown,method > $_SERVER[REQUEST_METHOD] ?? unknown,user_agent > $_SERVER[HTTP_USER_A…

Oracle 时间处理函数和操作符笔记

前言 写sql时经常用到时间处理函数&#xff0c;我整理了一份Oracle的常用sql笔记,供大家参考。 如果对你有帮助&#xff0c;请点赞支持~ 多谢&#x1f64f; 笔记 -- 1. 获取当前日期和时间 -- SYSDATE, SYSTIMESTAMP, CURRENT_DATE, CURRENT_TIMESTAMP, LOCALTIMESTAMP SELE…

TDengine时序数据库 详解

1. TDengine 简介 TDengine 是一款 高性能、分布式、支持 SQL 的时序数据库&#xff08;Time-Series Database, TSDB&#xff09;&#xff0c;专为 物联网&#xff08;IoT&#xff09;、工业互联网、金融监控、日志分析 等场景设计。其核心特点包括&#xff1a; 超高性能&…

【IDEA】idea怎么修改注册的用户名称?

文章目录[toc]问题**方法 1&#xff1a;通过 JetBrains 账户网站修改****方法 2&#xff1a;通过 IDEA 内跳转修改&#xff08;快捷方式&#xff09;****注意事项****补充&#xff1a;修改 IDEA 内的项目级用户名**如何退出IDEA用户登录&#xff1f;问题 在 IntelliJ IDEA 中修…

AR眼镜重塑外科手术导航:精准“透视”新突破

在现代医学领域&#xff0c;增强现实&#xff08;AR www.teamhelper.cn &#xff09;技术正以前所未有的方式改变外科手术导航的面貌。通过为医生提供实时的三维可视化、精准的空间定位和智能交互功能&#xff0c;AR眼镜正在成为手术室中的重要工具。本文将系统介绍AR眼镜在手术…

服务端对接 HTTP 接口传输图片 采用base64还是 multipart/form-data

在服务端对接HTTP接口传输图片时&#xff0c;选择 multipart/form-data 还是 Base64 编码&#xff0c;需要根据具体场景权衡。以下是详细对比和建议&#xff1a;1. multipart/form-data 优点 更适合大文件传输&#xff1a; 直接以二进制流传输图片&#xff0c;无需编码/解码&am…

如何在 Windows 上安装 MongoDB 及常见问题

MongoDB 是一款 NoSQL 数据库&#xff0c;在数据管理和存储方面以其无与伦比的强大功能和多功能性而脱颖而出。该平台凭借其灵活性、可扩展性和高性能保持着领先优势&#xff0c;赢得了众多企业的信赖。在这方面&#xff0c;MongoDB 以及其在 Windows 操作系统中的表现&#xf…

JS与Go:编程语言双星的碰撞与共生

在编程语言的璀璨星河中&#xff0c;JavaScript&#xff08;简称JS&#xff09;与Go语言凭借各自独特的魅力&#xff0c;成为不同领域的佼佼者。前者以灵活多变的姿态征服了前端世界&#xff0c;后者则以高效稳健的特性在后端领域崭露头角&#xff0c;二者的碰撞与共生&#xf…

【开源】WpfMap:一个基于WPF(Windows Presentation Foundation)技术构建的数据可视化大屏展示页面

文章目录一、项目概述1.1 项目定位二、适用场景2.1 企业数据展示2.2 监控中心2.3 会议展示三、功能特性3.1 高度自定义3.2 实时更新3.3 丰富的可视化组件3.4 良好的用户体验四、技术资源4.1 开源地址一、项目概述 1.1 项目定位 WpfMap是一个基于WPF&#xff08;Windows Prese…

macbook安装homebrew

homebrew是什么&#xff1f;Homebrew 是 macOS&#xff08;以及 Linux&#xff09;上的一款包管理工具&#xff0c;被称为 “macOS 缺失的包管理器”&#xff0c;它能帮助用户轻松安装、卸载、更新各种命令行工具、开发环境、应用程序等。简单来说&#xff0c;它的作用类似手机…

ViLT: 无卷积或区域监督的视觉-语言Transformer

温馨提示&#xff1a; 本篇文章已同步至"AI专题精讲" ViLT: 无卷积或区域监督的视觉-语言Transformer 摘要 视觉与语言预训练&#xff08;Vision-and-Language Pre-training, VLP&#xff09;在多种联合视觉与语言的下游任务中显著提升了性能。目前的 VLP 方法在很…

初识决策树-理论部分

决策树 前言 参考了大佬的博客&#xff1a;博客地址 适合分析离散数据&#xff0c;若是连续数据需要转换成离散数据再做分析(比如图中的年龄) 结构 决策树由节点和有向边组成&#xff1b;节点可分为内部节点和叶节点 内部节点:特征叶节点:类别有向边:特征的取值范围 在用决…

opencv--day02--图像颜色处理及图像仿射变换

文章目录前言一、 图像颜色处理1. 颜色加法1.1 OpenCV加法1.2 numpy加法1.3 颜色加权加法2.颜色空间2.1 RGB颜色空间2.2 HSV颜色空间3. 颜色转换3.1 读取的图片同时转换3.2 对已有图片转换4. 图像灰度化4.1 灰度图概念4.2 最大值灰度化4.3 平均值灰度化4.4 加权均值灰度化5. 图…