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