未来已来|人工智能与数据库融合发展分论坛议程初探 了解详情
写点什么

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

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

    阅读完需:约 3 分钟

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

6 月 17 日,极客时间《企业级 Agents 开发实战营》正式上线,10 周掌握企业级 Agents 从设计、开发到部署全流程。

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

评论

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

CentOS安装rar及用法

Java 程序员 后端

Chrome上的这些灵魂插件太猛了,碾压其他同款

Java 程序员 后端

dubbo实战之三:使用Zookeeper注册中心

Java 程序员 后端

ELK性能优化实战总结:我强任我强,你“跪”标准好好学

Java 程序员 后端

《Kubernetes in action 读书笔记》:Kurbernetes 架构设计

后台技术汇

Kubernetes 11月日更

Elasticsearch Document Index API详解、原理与示例

Java 程序员 后端

Elasticsearch Mapping parameters(主要参数一览)

Java 程序员 后端

Elasticsearch中的Term查询和全文查询

Java 程序员 后端

elasticsearch实战三部曲之二:文档操作

Java 程序员 后端

elasticsearch的字符串动态映射

Java 程序员 后端

ELK太重?试试KFC日志采集

Java 程序员 后端

Eureka(F版本)教程五 路由网关(zuul)

Java 程序员 后端

CentOS7系统中安装JDK8

Java 程序员 后端

Chrome 灵魂插件!爱了爱了!

Java 程序员 后端

ConcurrentHashMap锁的前世今生,了解一下

Java 程序员 后端

PS基础操作-新建画布和打开图片

hepingfly

ps教程 ps学习笔记

架构实战营 - 模块三作业

危险游戏

架构实战营

Docker系列(2)--容器和镜像的使用

Java 程序员 后端

Docker镜像超详细介绍

Java 程序员 后端

Elasticsearch查询速度为什么这么快?看啥?问你呢!

Java 程序员 后端

CPU战争40年,终于把Intel打趴下了

Java 程序员 后端

Docker下Nacos持久化配置

Java 程序员 后端

Elasticsearch聚合学习之四:结果排序(1)

Java 程序员 后端

Eureka(F版本)教程三 服务消费者(Feign)

Java 程序员 后端

Docker多阶段构建实战(multi-stage builds)(1)

Java 程序员 后端

Elasticsearch文档读写模型实现原理

Java 程序员 后端

disruptor笔记之一:快速入门

Java 程序员 后端

Docker下的Nacos环境开发

Java 程序员 后端

Docker多阶段构建实战(multi-stage builds)

Java 程序员 后端

Dubbo overrideDirectoryUrl的作用?

Java 程序员 后端

Elasticsearch聚合学习之四:结果排序

Java 程序员 后端

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