写点什么

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

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

    阅读完需:约 3 分钟

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

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

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:093855

评论

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

Kubernetes手记(13)- 用户认证系统

雪雷

k8s 6月日更

MySQL基础之十四:事务

打工人!

MySQL 6月日更

沟通的方法:反向叙述

石云升

读书笔记 沟通 6月日更

【21-9】文件和文件夹

耳东@Erdong

PowerShell 6月日更

DeFi从入门到精通

hasWhere

从金融街往事到全场景智慧金融未来

脑极体

期权的初步认识

Qien Z.

期权 6月日更

「SQL数据分析系列」5. 多表查询

数据与智能

数据库 sql 查询语句

5分钟速读之Rust权威指南(二十三)Cargo

wzx

rust

区块链场景化应用大有可为

CECBC

深入了解Spring框架之WebMVC框架

邱学喆

spring webmvc HandlerMethod HandlerInterceptor

ios webRTC实现屏幕共享功能

侠客行

ios WebRTC iOS屏幕共享 replaykit

Tomcat架构的认知

邱学喆

tomcat @WebServlet @WebFilter Manager

让区块链价值的属性之一“免信任”,更好的融入

CECBC

数字化转型须遵循“战略五原则”和“3-1-1战术”

李洋

数字化转型 信创 战略思考 企业数字化 战略技术

django-task1 笔记之python基础

橙橙橙橙汁丶

django #python

servlet工作原理之tomcat篇

hasWhere

相比买买买,我们更想在618聊一聊云厂商的能力象限价值几何

脑极体

一个jvm线程占用多少操作系统内存

hasWhere

科普 DeFi 中的闪电贷

hasWhere

数据库索引为什么使用B+树

hasWhere

源码级别理解 Redis 持久化

蘑菇睡不着

Java redis Redis 协议

CSS实战 | 磁性页头和页脚的表格制作

devpoint

CSS 6月日更

网络攻防学习笔记 Day46

穿过生命散发芬芳

网络攻防 6月日更

《原则》(十六)

Changing Lin

6月日更

form-data和x-www-form-urlencoded

hasWhere

Java中的关键字final

架构精进之路

Java 6月日更

内推学弟进了腾讯,看看他的标杆简历!

程序员鱼皮

Java 后端 简历 校招 秋招

戏说前端 JavaScript 之『防抖节流』基础知识

编程三昧

JavaScript 大前端 防抖节流 函数节流 函数防抖

Zookeeper在线迁移

阿骆麦迪

zookeeper 分布式 中间件 6月日更

全国首个“区块链+数字人民币”应用场景在雄安新区落地

CECBC

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