在本节中,我们将探讨如何分析 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
,你可以通过experimental_registerGlobalTrace
和 experimental_cleanupGlobalTrace
开启,查看 我们如何使用这两个函数在 @rspack/cli
中实现 RSPACK_PROFILE
获取更多信息。tracing-chrome
支持以图形方式查看 tracing 信息。
在运行 Rspack 之前设置环境变量 RSPACK_PROFILE=TRACE=layer=chrome
,例如
产生了一个 trace 文件 (.rspack-profile-${timestamp}/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,例如
如果您使用的是 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 通过