写点什么

从 14s 到 4s,我如何将 macOS 上的 Rust 增量编译时间减少 70%?

  • 2021-04-19
  • 本文字数:781 字

    阅读完需:约 3 分钟

从14s到4s,我如何将 macOS上的 Rust 增量编译时间减少70%?

Rust 1.51 发布之后,我注意到里面有一个新的特性 Cargo 可以帮助缩短 macOS 的编译时间。升级启用了这个选项周,我的增量开发重建时间从 14s 缩短到了 4s。

加快构建速度


Rust 1.51 发行说明中,有一章节是专门介绍如何配置调试信息。默认情况下,在 macOS 上,rustc 会运行一个名为 dsymutil 的工具,该工具会分析二进制文件,然后构建调试信息目录。


如果使用 cargo run 来开发构建,那么可能每次都会构建此调试信息,因为它是开发配置文件的默认设置。而在 Rust 1.51 中,我们可以配置 split-debuginfo,使其跳过 dsymutil。


Rust 1.51 发行说明:


现在,Rust backtraces 切换到使用其它后端,该后端支持加载 debuginfo 无需运行 dsymutil,并且该功能目前已经稳定。


有人认为,这个功能很快就会成为 macOS 的默认配置。


如何配置呢?首先打开 Cargo.toml 并添加以下选项:


[profile.dev]split-debuginfo = "unpacked"
复制代码


如果你之前禁用了 debug,那么就无法生成调试信息,自然也就无法看到速度提升。如果你之前因为编译时间太久而禁用了 debug,那么现在可以重新打开,试试这个新方法吧。

到底能快多少?


Cargo 新特性到底能帮助 debug 提升多少呢?我自己构建了一个 Puzzle Panda 的拼图游戏网站,该网站是使用 Rust 编写的后端 API。经过我自己的测试,cargo run dev rebuilds 从之前的 14s 成功减少到了 4s,大约节省了 70% 的构建时间。


就项目规模而言,Puzzle Panda 的 Rust API 很小,但是它其中引入了很多传递性依赖关系,因此构建时间很长。14s 的 Dev rebuilds 时间是一直困扰我的问题,但是现在 split-debuginfo 的出现解决了我的难题。


至于 split-debuginfo 在中型 Rust 项目中,是否会有一样的项目,目前我还不确定。希望有感兴趣的人,能够实践并分享给我们。


参考链接:


https://jakedeichert.com/blog/reducing-rust-incremental-compilation-times-on-macos-by-70-percent/

2021-04-19 14:094085

评论

发布
暂无评论
发现更多内容

我与你地铁高峰期的邂逅,背后竟然是?

脑极体

CSS ( Cascading Style Sheets )

roadup

CSS

漫谈分层架构:为什么要进行架构分层?

AI乔治

Java 架构 高可用系统的架构 高可用架构

数仓建设中最常用模型--Kimball维度建模详解

五分钟学大数据

大数据 数据仓库 数仓 维度建模

助力ARM生态 —Dragonwell新增aarch64支持

阿里云基础软件团队

前端性能优化

roadup

大前端 性能调优

扫盲帖:聊聊微服务与分布式系统

AI乔治

Java 架构 微服务 分布式系统

重学JS | 改变函数上下文的3种方式

梁龙先森

大前端 编程语言 28天写作

探索 React 合成事件

Geek_z9ygea

大前端 React 28天写作

原理竟然是这!GitHub上标星13k的《Android面试突击版》,醍醐灌顶!

欢喜学安卓

android 程序员 面试 移动开发

读《关于中台的思考与尝试》,我竟然懂得了这么多!

李忠良

中台 方法论

redis中的一致性hash

原来不悔

redis 一致性hash

SpringBoot太强了、ShardingSphere上榜

spring 编程 框架

突然明白 npm install xxx 的业务实际用处

blueju

大前端 npm

异步I/O -- posix aio 从入门到放弃的吐血实践

1412

workflow srpc 异步调度 posix aio kqueue

Spring Boot 使用slf4j进行日志记录

武哥聊编程

Java springboot SpringBoot 2 slf4j 28天写作

synchronized只会用不知道原理?一文搞定

Java鱼仔

Java 面试 并发 synchronized

三分钟快速详细安装CentOS

程序员的时光

Linux centos 程序员 28天写作

跨界

张老蔫

28天写作

新的方式-谷歌浏览器插件的使用【天猫超市抢购飞天茅台】

谙忆

架构师训练营第七周作业

zamkai

记录一下我离线依赖迁移安装的具体尝试过程

blueju

JavaScript 大前端 npm Node webpack

巧合?达摩院2021十大科技是十九世纪那场幻想的升级版?

Java架构师迁哥

Synchronized 精讲

伯阳

Java 多线程 高并发 synchronized java关键字

网线如何制作和如何使用?

精选算法面试-队列

李孟聊AI

算法 队列 28天写作

不可多得的干货!耗时两个礼拜,8000字安卓面试长文,内含福利

欢喜学安卓

android 程序员 面试 移动开发

Spring5.0源码学习系列之Spring AOP简述

AI乔治

Java spring 架构

python 输入输出

赵开忠

Python 28天写作

12月阿里蚂蚁金服四面(已拿offer)Java技术面经总结:项目+源码+jvm调优+MySQL

Java 学习 编程 程序员 面试

计算机网络基础

roadup

TCP 网络 HTTP 计算机 HTTP3.0

从14s到4s,我如何将 macOS上的 Rust 增量编译时间减少70%?_大前端_jakedeichert_InfoQ精选文章