拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Next.js Turbopack 性能追踪实战:用 NEXT_TURBOPACK_TRACING 生成并分析 trace-turbopack.bin

Next.js Turbopack 性能追踪实战用 NEXT_TURBOPACK_TRACING 生成并分析 trace-turbopack.bin【免费下载链接】next.jsThe React Framework项目地址: https://gitcode.com/GitHub_Trending/next/next.jsTurbopack 底层的turbo-tasks引擎自带一套 tracing 机制可以记录每个函数执行的耗时与内存消耗是调试和优化 Next.js 构建/开发服务器性能的核心工具。本文基于当前仓库的贡献文档与 CLI 源码完整讲解如何通过环境变量NEXT_TURBOPACK_TRACING或--internal-trace参数打开追踪、产出二进制 trace 文件再用 trace-server 与可视化 Viewer 进行多维度分析。读完本文你可以独立复现采集 trace → 本地起服务 → 浏览器看火焰/聚合视图的完整性能分析流程。一、为什么需要 Tracingturbo-tasks 的执行与资源追踪turbo-tasks是 Turbopack 的编译执行引擎其自带的 tracing 功能可以记录每一次执行的运行时间runtime和内存消耗memory consumption。这对两类场景尤其有用调试性能问题某次next dev冷启动或next build明显变慢需要定位是哪个环节文件读取、模块解析、转译、CSS 处理……占用了时间优化 Turbopack 本身开发者在修改 Rust 侧代码前后对比 trace 数据确认改动是否生效。在 Next.js 中这套能力通过环境变量NEXT_TURBOPACK_TRACING对外暴露。二、开启追踪NEXT_TURBOPACK_TRACING 的四个预设档位在 Next.js 中只需设置NEXT_TURBOPACK_TRACING即可启用追踪。该变量支持以下几个特殊预设值档位逐级包含更底层的日志预设值说明1或overview基础的用户级user level追踪。这是已发布 Next.js 版本中唯一可用的档位next与overview相同但额外包含 Next.js 自有 crate 的debug和trace级别日志turbopack与next相同但再包含 Turbopack 自有 crate 的debug和trace级别日志turbo-tasks与turbopack相同并对每个 Turbo-Engine 函数执行做逐条的详细追踪verbose tracing例如在开发服务器上开启NEXT_TURBOPACK_TRACINGoverview pnpm next dev除了预设值之外该变量还支持tracing_subscriber::filter::EnvFilter的任意 directives 语法因此可以用 Rust tracing 生态的标准过滤器来按 crate、按级别精细控制输出例如组合多个过滤规则分别指定不同模块的日志级别。发布版本 vs 自定义构建的重要限制注意普通的 canary / stable 发布版本只包含info 级别的追踪即预设表中overview所对应的用户级追踪这是面向最终用户的设计。若要获得next、turbopack、turbo-tasks等更详细的日志必须自己编译一份 Next.js自定义构建。构建方式参见仓库中的 开发指南。这条限制解释了为什么预设要分层发布包中裁剪掉 debug/trace 日志避免在普通用户场景下产生过大的 trace 文件与性能开销而贡献者从源码构建时则能拿到全量数据。三、CLI 侧的落地--internal-trace 与 .next-profiles 目录从当前仓库的 CLI 源码可以看到--internal-trace参数就是NEXT_TURBOPACK_TRACING的命令行封装next build与next dev两条命令均支持见 CLI 入口 与 dev 命令# next build / next dev 均支持 next build --internal-trace # 默认档位 all → 映射为 turbo-tasks next build --internal-trace overview # 仅用户级追踪 next dev --internal-trace overview源码中的映射逻辑很直接next.tsif (options.internalTrace) { process.env.NEXT_TURBOPACK_TRACING options.internalTrace all ? turbo-tasks : String(options.internalTrace) }即--internal-trace all默认等价于NEXT_TURBOPACK_TRACINGturbo-tasks--internal-trace overview等价于overview。当检测到追踪开启时CLI 入口还会调用setupProfilesDirnext.ts自动创建.next-profiles目录并写入.gitignore防止误提交。注意源码中的判断只要设置了NEXT_TURBOPACK_TRACING且未设置NEXT_TURBOPACK_TRACING_PATH后者用于重定向输出位置就会创建该目录。追踪过程中Next.js 最终会把 tracing 信息以二进制格式写入.next-profiles/trace-turbopack.bin从 upload-trace.ts 可以看到该二进制文件的魔数头部是TRACEv0// Turbopack trace files start with this magic header (written by trace_writer.rs) const TURBOPACK_TRACE_HEADER Buffer.from(TRACEv0)仓库中配套的上传工具packages/next/src/cli/internal/upload-trace.ts会扫描.next-profiles目录下*.cpuprofile与trace-turbopack.bin文件校验头部后上传可供参考其文件校验逻辑空文件跳过、TRACEv0头部校验、64KB 分块进度流。四、可视化turbo-trace-viewer 与 trace-server拿到.next-profiles/trace-turbopack.bin后用官方的turbo-trace-viewer工具进行可视化。该工具通过localhost 的 57475 端口 WebSocket连接到一个 trace-server 来读取二进制 trace。启动方式有两种# 方式一直接跑 Rust 二进制 cargo run --bin turbo-trace-server --release -- /path/to/your/trace-turbopack.bin # 方式二Next.js 仓库内部命令源码构建环境 pnpm next internal trace .next-profiles/trace-turbopack.bin服务启动后在浏览器中打开官方 trace viewer 页面https://trace.nextjs.org/即可连接并查看。性能提示运行 trace server 务必使用--release构建。trace server 在 debug 模式下非常慢release 构建能带来约10 倍的性能差距这在处理大体积 trace 文件时体感非常明显。五、读懂 Viewer五种可视化模式与五种数值维度trace viewer 的核心价值在于多个视角 × 多个指标的自由组合。5.1 可视化模式如何组织 Span 的树结构Aggregated spans同一父节点下同名 span 聚合为一组适合快速找到哪类操作总耗时高Individual spans每个 span 单独展示适合逐条审查... in orderspan 按发生顺序排列适合还原执行时间线... by value按数值大小排序数值最大的 span 排在最前适合快速定位热点Bottom-up view不显示 span 的总耗时而显示其self value自身耗时不含子 span适合区分自身慢和子任务慢。5.2 数值模式每个 span 用什么指标衡量Durationspan 的 CPU 时间Allocated Memoryspan 执行期间分配的内存量Allocationsspan 执行期间的分配次数Deallocated Memoryspan 执行期间释放的内存量Persistently Allocated Memoryspan 期间分配但未被释放、存活过该 span 的内存量——这是排查构建/编译过程中内存持续增长的关键指标。实际排查经验路径通常是先用Duration by value找到总耗时热点再切到Bottom-up view判断是自身开销还是子 span 开销最后切到内存类指标确认是否存在随编译进程累积的内存增长。六、典型工作流小结选择档位已发布版本用NEXT_TURBOPACK_TRACINGoverview或next build --internal-trace overview贡献者从源码构建后可用next/turbopack/turbo-tasks逐级加细节运行执行next dev/next build触发需要分析的构建或请求采集进程退出后得到.next-profiles/trace-turbopack.bin文件以TRACEv0头部标识服务cargo run --bin turbo-trace-server --release -- .next-profiles/trace-turbopack.bin务必--release分析打开 trace viewer按 5.1 / 5.2 的模式组合定位热点 span 与内存增长。七、相关入口速查本文对应文档contributing/turbopack/tracing.md源码构建 Next.js解锁更详细追踪档位contributing/core/developing.mdCLI 追踪参数与 profiles 目录逻辑packages/next/src/bin/next.tstrace 文件校验与上传逻辑TRACEv0头部packages/next/src/cli/internal/upload-trace.tsdev 进程中环境变量透传packages/next/src/cli/next-dev.ts适用前提提示next/turbopack/turbo-tasks档位仅在自行编译的 Next.js 构建中生效--internal-trace属于内部internal调试参数面向贡献者与深度排障场景普通项目日常使用overview档位即可。【免费下载链接】next.jsThe React Framework项目地址: https://gitcode.com/GitHub_Trending/next/next.js创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门