在本节中,我们将探讨如何对 Rspack 进行性能分析以识别瓶颈。通过检查 Rspack 在哪里花费时间,我们可以深入了解如何提高性能。由于不同的分析器具有不同的优势,因此最好使用多种分析器。
tracing
用于对 Rspack 进行跟踪。
支持的跟踪级别:
INFO
、WARN
和 ERROR
TRACE
、DEBUG
、INFO
、WARN
和 ERROR
两种启用跟踪的方法
@rspack/cli
,可以通过 RSPACK_PROFILE
环境变量来启用跟踪。@rspack/core
而不是 @rspack/cli
,可以通过 rspack.experiments.globalTrace.register
和 rspack.experiments.globalTrace.cleanup
来启用跟踪。请查看 我们在 @rspack/cli
中如何使用这两个函数来实现 RSPACK_PROFILE
,以了解更多详细信息。tracing-chrome
支持图形化查看跟踪信息。
在运行 Rspack 之前设置环境变量 RSPACK_PROFILE=TRACE=layer=chrome
,例如
将在当前工作目录中生成一个跟踪文件(.rspack-profile-${timestamp}-${pid}/trace.json
)。
JSON 跟踪文件可以在 chrome://tracing
或 ui.perfetto.dev 中查看。
可以通过 RSPACK_PROFILE=TRACE=layer=logger
在终端查看详细的跟踪事件值,例如
将打印传递给 Rspack 的选项以及每个单独的跟踪事件。
如果我们发现性能瓶颈是在 JS 端(例如 js 加载器),那么我们需要进一步分析 JS 端,可以使用 Nodejs 性能分析来分析。例如
或
这将生成一个 CPU 分析文件,例如 CPU.20230522.154658.14577.0.001.cpuprofile
,可以使用 speedscope 来可视化分析结果,例如
如果我们想分析加载器和插件的时间成本或加载器的编译行为,可以使用 Rsdoctor 来查看
请参考 Rsdoctor 编译分析
如果您使用的是 Mac,可以使用 Xcode Instruments 生成 CPU 分析结果。
要安装 Xcode Instruments,只需安装命令行工具
对于普通的 Rust 构建,可以使用 cargo instruments
作为性能分析和生成跟踪文件的粘合剂。
由于 Rspack 构建需要相当长的时间,因此您可以使用以下步骤而不调用 cargo instruments
。它具有相同的效果。
在工作区根目录的 Cargo.toml
中,在 [profile.release]
部分启用调试符号并禁用符号剥离
然后构建项目
构建项目后,最终的二进制文件将位于 packages/rspack-cli/bin/rspack
中。
在幕后,cargo instruments
调用 xcrun
命令,这意味着我们可以在使用 Rspack 的自己的项目中运行以下命令。
它将生成以下输出
我们可以通过以下方式打开跟踪文件