2023 年 11 月 10 日,星期五

YJIT 默认启用,Active Model 改进等更多内容

作者:Wojtek

大家好,我是 Wojtek。本周,关于 Ruby on Rails 起源的纪录片首映。您可以在 Honeypot YouTube 频道上观看。现在,让我们来看看本周 Rails 代码库中的更改。

如果运行 Ruby 3.3+,默认启用 YJIT
有许多公开报告显示,启用 Ruby 3.2 YJIT 的 Rails 应用的延迟提高了 15-25%,而在 3.3 中效果更好。遵循 更改,在 Ruby 3.3 中,YJIT 默认处于暂停状态而不是禁用状态,这允许我们从初始化器中启用它。

使 Active Record inspect 的输出可配置。
可以使用 attributes_for_inspect 方法

Post.attributes_for_inspect = [:id, :title]
Post.first.inspect #=> "#<Post id: 1, title: "Hello, World!">"

attributes_for_inspect 设置为 :all 时,将列出记录的所有属性(开发和测试环境的默认值)。也可以调用 full_inspect 来获得包含所有属性的检查。

将 type_for_attribute 移植到 Active Model
type_for_attribute 方法移植到 Active Model。包含 ActiveModel::Attributes 的类现在将提供此方法,其行为与 Active Record 中的相同。

将 BeforeTypeCast 模块移植到 Active Model
包含 ActiveModel::Attributes 的类现在将自动定义诸如 *_before_type_cast*_for_database 等方法,其行为与 Active Record 中的相同。

在 Action Mailer 预览中,将内联附件与普通附件分开列出
以前列为“附件:logo.png file.pdf”的附件,现在将列为“附件:file.pdf (内联:logo.png)”。

在 Action Mailer 预览中,如果存在 Date 标头,则显示日期
当标头不存在时(如之前那样),则回退到当前时间。

在 Action Mailer 预览中,仅在相关时显示 SMTP 信封收件人
如果 SMTP-ToToCcBcc 的并集不同,则显示 SMTP-To

修复在 Sprockets 中使用 Action Text Javascript 的问题
编译 ESM 包,该包可直接在浏览器中用作 actiontext.esm.js

在并行化系统测试之前预加载 Selenium driver_path
修复了可能导致并行系统测试出现“Text file busy - chromedriver”错误的竞争条件。

修复 Active Model 对无穷大的更改检测
值为 Float::INFINITY 的属性,现在在重新赋值为相同值时不会被标记为已更改。

修复 Active Record 对序列化值的查询
修复了当 field 是序列化属性或 JSON 列时,如 where(field: values) 这样的查询。

您可以在 这里查看所有更改。
上周,我们有 32 位贡献者 为 Rails 代码库做出了贡献!

下次再见!

订阅以通过邮件获取这些更新。