crates.io:开发更新

2024 年 7 月 29 日 · Tobias Bieniek 代表 crates.io 团队

由于 crates.io 没有传统意义上的版本发布,因此也没有版本说明。然而,crates.io 团队仍希望向大家通报 crates.io 的最新开发进展。这篇博文总结了我们在过去几个月对 crates.io 所做的最重大更改。

cargo install

查看 ripgrep 等 crates 时,您会注意到安装说明现在是 cargo install ripgrep,而不是 cargo add ripgrep。我们实施了这一更改,以便用户更容易安装包含二进制目标的 crates。cargo add 仍然是将 crate 添加到项目作为依赖项的正确命令,但对于 ripgrep 这种仅包含二进制文件的 crate,cargo install 是更好的选择。

我们通过分析上传到 crates.io 的 crate 文件来实现这一点。如果 crate 包含二进制目标,二进制文件的名称现在将保存在我们的数据库中,然后方便地显示在 crate 页面上

Dark Mode Screenshot

推出此功能后,我们收到通知,一些库 crate 使用二进制文件用于本地开发目的,作者不希望在 crate 页面上列出这些二进制文件。cargo 团队一直在努力解决此问题,通过使用 exclude manifest 字段,该字段将很快发布。

深色模式

如果您的操作系统设置为深色模式,您可能已经注意到 crates.io 现在会自动切换到深色用户界面主题。如果您不喜欢深色主题,您仍然可以通过单击页面右上角的颜色主题图标切换回浅色主题。默认情况下,主题将根据您操作系统的深色主题设置进行设置,但您也可以手动覆盖此设置。

Dark Mode Screenshot

与 GitHub 类似,我们现在也为 README.md 文件中的图像提供了深色/浅色主题支持

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="https://test.crates.io/logo_dark.svg">
  <img src="https://test.crates.io/logo.svg" alt="logo" width="200">
</picture>

RSS 源

受到 Python Package Index 的朋友们的启发,我们为 crates.io 引入了一些实验性的 RSS 源

这将使您能够在您喜欢的 RSS 阅读器中跟踪最新的 crate 发布和更新。最初的 GitHub issue 请求了您在 crates.io 上“关注”的所有 crate 的源,但我们认为目前按 crate 提供的源会更有用。如果您对此功能有任何反馈,请告诉我们!

API token 过期通知

我们的 crates.io 团队成员 @hi-rustin 一直非常积极地改善我们的 API token 用户体验。如果您创建带有过期日期的 API token,您现在将在 token 过期前三天收到通知电子邮件。这将帮助您记住在 token 过期之前续订,以避免您的脚本停止工作。

在此更改之后,他还实现了一种基于现有 token 配置创建新 API token 的方法,这将大大简化 token 的续订,而无需重新配置所有权限。“API tokens”设置页面上的用户界面现在显示一个“重新生成”按钮,允许您复制现有 token 的权限。同样,token 过期通知现在也将包含一个直接填充过期 token 权限的链接,以便您可以轻松创建一个具有相同权限的新 token。

Dark Mode Screenshot

数据库性能优化

crates.io 团队的新成员 @eth3lbert 一直致力于优化支持 crates.io 的数据库查询。他一直在进行一些旨在减轻数据库服务器负载并加快网站速度的拉取请求。他进行的一些更改包括

  • #7865:进一步加速反向依赖查询
  • #7941:改进 crates 端点性能
  • #8734:在 versions 表上添加部分索引
  • #8737:使用 default_versions 表提高反向依赖的性能

除此之外,我们最近将数据库服务器迁移到了一个新提供商,该提供商拥有更多内存和更快的存储。这也提高了网站的性能,并使我们能够在不遇到性能问题的情况下运行更复杂的查询。例如,之前加载 https://crates.io/crates/syn/reverse_dependencies 需要几秒钟,但现在服务器通常在不到一秒的时间内响应。

另一个部分是将网站不再需要的旧数据归档。我们将超过 90 天的下载计数移动到存储在 S3 上的 CSV 文件中,这些文件很快将通过我们的 CDN 公开下载。这显著减小了数据库的大小,并提高了我们一些后台作业的性能。

反馈

希望您喜欢关于 crates.io 开发的本次更新。如果您有任何反馈或问题,请在 ZulipGitHub 上告诉我们。我们总是很高兴收到您的来信,并期待您的反馈!