2023 年 11 月 10 日,星期五

默认启用 YJIT,改进活动模型还有很多

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 暂停而不是默认禁用,这使得我们可以从初始化程序启用它。

使活动记录检查的输出可配置。
可以使用 _attributes_for_inspect_ 方法

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

将 _attributes_for_inspect_ 设置为 _:所有_,将列出所有记录的属性(开发和测试环境的默认设置)。用户还可以调用 _full_inspect_ 来获得具有所有属性的检查。

将 _type_for_attribute_ 移植到活动模型
将 _type_for_attribute_ 方法移植到活动模型。现在,包含 _ActiveModel::Attributes_ 的类将提供此方法,其行为与 Active Record 相同。

将 _BeforeTypeCast_ 模块移植到活动模型
现在,包含 _ActiveModel::Attributes_ 的类将自动定义方法,例如 _*_before_type_cast_、_*_for_database_ 等,其行为与 Active Record 相同。

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

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

在 Action Mailer 预览中,仅在相关时显示 SMTP 信封收件人
如果 _SMTP-To_ 不同于 _To_、_Cc_ 和 _Bcc_ 的并集,则显示 _SMTP-To_。

修复在 Sprockets 中使用 Action Text JavaScript
编译 ESM 包,该包可以用作 _actiontext.esm.js_ 直接在浏览器中使用。

在并行化系统测试之前预加载 Selenium driver_path
修复了可能导致与并行系统测试一起出现“文本文件繁忙 - chromedriver”错误的竞争条件。

修复了活动模型对无穷大的变更检测
从现在开始,值为 _Float::INFINITY_ 的属性在重新赋值为相同值时不会标记为已更改。

修复了对序列化值进行 Active Record 查询
修复了当 _field_ 是一个序列化属性或一个 JSON 列时,如 where(field: values) 等查询。

您可以在 此处 查看完整的变更列表。
上周,32 位贡献者为 Rails 代码库做出了贡献!

下次见!

订阅,将这些更新邮件发送给您。