50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

评论

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

Vue复刻华为官网 (一)

游坦之

10月月更

Vue实现日期选择器

游坦之

10月月更

整合Mybatis、Servlet、Mysql、Axios、Filter、Session写一个入门级项目:非常适合初接触JavaWeb的小白白来进阶

游坦之

10月月更

【JavaWeb】过滤器和监听器,就这?

游坦之

10月月更

SQL注入的题目

w010w

网络安全 SQL注入 SQL语句 10月月更

Vagrant定制个性化CentOS7模板

程序员欣宸

vagrant 虚拟机 10月月更

VM虚拟机下Ubuntu系统扩展磁盘大小方法

DS小龙哥

10月月更

ubuntu16.04安装deb软件包教程

DS小龙哥

10月月更

统计匹配检索规则的物品数量

掘金安东尼

算法 10月月更

记一次网络安全应急响应流程

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

JVM是什么?Java程序为啥需要运行在JVM中?

wljslmz

Java JVM 虚拟机 10月月更

SQL注入

w010w

网络安全 WEB安全 SQL注入 10月月更

设计模式之禅01单一职责原则

okokabcd

设计模式

【运维】Centos 7 一键 搭建 Java开发者环境

石臻臻的杂货铺

Java 运维 10月月更

数据库&基本SQL语法

w010w

数据库 sql 10月月更

电脑安装Ubuntu桌面系统(部署开发环境、直接U盘安装,针对I386工控板)

DS小龙哥

10月月更

【分布式技术专题】「架构实践于案例分析」总结和盘点目前常用分布式技术特别及问题分析

码界西柚

分布式 微服务 10月月更 微服务化

从AI生成视频看人工智能未来发展趋势​

felix

人工智能 AI 图片生成

Java | Date类

陌上

Java 编程 10月月更

在熬夜中成长

暮春零贰

熬夜 10月月更

面试官:说说你平时都用过哪些分布式ID生成方案?

程序员小毕

Java 程序员 分布式 后端 分布式ID

图解 | 聊聊「秒杀」

小小怪下士

Java 程序员 高并发 秒杀

Storm概念与架构

穿过生命散发芬芳

Storm 10月月更

Java | StringBuilder类/StringBuffer类

陌上

Java 编程 10月月更

Java | DateFormat和SimpleDateFormat类

陌上

Java 编程 10月月更

【JavaWeb】一篇承载Ajax、Axios、Json的学习笔记~

游坦之

10月月更

3分钟了解CDN的工作原理

阿泽🧸

CDN 10月月更

2022-10-29:go语言中的defer能非常方便地处理资源释放问题,rust语言里如何实现defer功能呢?

福大大架构师每日一题

rust defer 福大大 RAII

【web 开发基础】PHP 自定义函数之函数的调用 -PHP 快速入门 (25)

迷彩

函数调用 函数 10月月更 web开发基础 PHP基础

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