写点什么

从 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:094273

评论

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

spring4.1.8扩展实战之五:改变bean的定义(BeanFactoryPostProcessor接口)

程序员欣宸

Java spring Spring Framework 6月月更

JavaScript异步函数async/await

大熊G

JavaScript 前端 6月月更

用 Golang 重写 rsync(3):C里面的谜之指针

百家饭隐私计算平台创业者

c

NFT链游系统开发|NFT卡牌盲盒游戏

薇電13242772558

NFT 链游

InfoQ 极客传媒 15 周年庆征文| 手把手带你入门 API 开发

宇宙之一粟

flask-restful 6月月更 InfoQ极客传媒15周年庆 API开发

Vone观点说|用DAO打造人类协作新形态

旺链科技

区块链 产业区块链 自组织协作

MySQL索引

龙空白白

索引 MySQL InnoDB

测试开发【Mock平台】05开发:项目管理(一)后端接口

MegaQi

测试平台开发教程 6月月更 测试技术干货

手把手教学直播:如何提交 PR 成为龙蜥社区贡献者? | 第 23 期

OpenAnolis小助手

开源 PR 龙蜥社区 龙蜥大讲堂 社区贡献

测试流程如何落地?

老张

软件测试 质量保障

Linux开发_Makefile规则与Shell脚本语言

DS小龙哥

6月月更

6大优势、2种类型,一文吃透动态应用安全测试(DAST)

SEAL安全

DevOps 网络安全 DevSecOps 软件安全

企业知识管理就是信息化建设吗?

小炮

使用 Prometheus 监控 SAP ABAP 应用程序

汪子熙

云计算 Kubernetes 云原生 abap 6月月更

云原生技术 - 如何从代码到制作并发布一个 Helm 包?

孙健波

云原生 Helm

几个非常有用的 Flutter 技巧,你可以立即使用!

坚果

6月月更

Django 中的视图 | Python

海拥(haiyong.site)

Python django 6月月更

【Python技能树共建】pyspider框架的使用

梦想橡皮擦

Python 6月月更

面试突击57:聚簇索引=主键索引吗?

王磊

Java MySQL 面试

docker和docker compose安装使用、入门进阶案例

偶尔善良

Docker docker-co

InfoQ 极客传媒 15 周年庆征文|uni-app 路由传参参数丢失问题解决方案探究

No Silver Bullet

前端 6月月更 InfoQ极客传媒15周年庆 路由传参

一个 Angular 程序员两年多的远程办公经验分享 | 社区征文

汪子熙

程序员 远程办公 Slack 6月月更 初夏征文

实战 | Kibana面板使用

写程序的小王叔叔

Kibana ELK Stack 6月月更

四次蝉联中国容器云市场TOP5!为应用赋能

BoCloud博云

云原生 容器技术 容器云 博云

C#入门系列(十六) -- 类及其成员介绍

陈言必行

C# 6月月更

Paper Reading 预告 | Volcano-An Extensible and Parallel Query Evaluation System(众神推荐的 Paper 下载合集)

TiDB 社区干货传送门

TiDB Paper Reading

纯CSS 毛玻璃效果 💎

德育处主任

CSS 纯CSS 6月月更

助力直播平台源码脱颖而出,要完成哪些关键功能?

开源直播系统源码

软件开发 直播源码

大数据培训Flink 简介与认知

@零度

flink 大数据开发

安全服务厂商安全狗加入龙蜥社区

OpenAnolis小助手

开源 网络安全 龙蜥社区 龙腾计划 安全狗

测试开发【Mock平台】04实战:前后端项目初始化与登录鉴权实现

MegaQi

测试平台开发教程 测试干货 6月月更

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