2022 年 7 月 4 日星期一

改进了 PostgreSQL 支持,提升了性能,还有更多...

作者:p8

嗨,我是 Petrik,我将为大家带来 Rails 世界的最新消息。

优化活动记录分批处理

对于批查询(WHERE IN (…ids…)),不再指定 id 的长列表,相反,活动记录将在范围内进行迭代(WHERE id >= num1 AND id < num2)

为 PostgreSQL 索引添加有效性检查

使用CONCURRENTLY创建索引时,可能会得到无效的索引。现在,可以询问索引是否有效。

添加对 PostgreSQL 排他约束的支持
这将 Active Record 的迁移 / 架构转储扩展到支持 PostgreSQL 排他约束

为 ActiveSupport::Cache::Store#fetch_multi 添加 :force 支持
设置force: true会强制缓存“未命中”,也就是说,即使有缓存值,我们也将其视为不存在。#fetch_multi  现在支持所有 #fetch 选项。

如果唯一字段未更改且由唯一索引支持,则避免对其进行验证

之前,在保存记录时,Active Record 将执行一个额外的查询,以检查具有唯一性验证的每个属性的唯一性,即使该属性没有更改。

如果数据库有对应的唯一索引,那么这个验证对于持久记录永远不会失败,我们可以安全地跳过它。

Notifications::Fanout 的速度更快,更安全
这些更改旨在改进 ActiveSupport::Notifications::Fanout。它应该让订阅 / 取消订阅正在传输的主题更安全。除了事件驱动,在所有情况下,它也快得多。

从 strip_tags 返回的字符串都被正确标记为 html_safe?

由于从 strip_tags 返回的字符串不包含 HTML 元素,并且已经对基本实体进行了转义,因此,可以安全地将其原样作为 PCDATA 包含在 HTML 内容中。将它们标记为 html-safe 可避免在渲染期间将它们连接到 SafeBuffer 时对实体进行二次转义。

运行 app:update 时,正确检查框架是否被禁用

在创建新的 Rails 应用程序时,可以使用 –skip-* 选项来禁用框架。升级到 Rails 的新版本后,可以通过运行 bin/rails app:update 来更新所有配置。此更改确保禁用框架在升级后保持禁用状态。

默认启用 MemCacheStore 和 RedisCacheStore 的连接池

使用 单个选项,缓存存储可以启用连接池。此选项现在对于 MemCacheStore 和 RedisCacheStore 默认为 true。

为 MessageVerifier 和 MessageEncryptor 构造函数添加 :urlsafe 选项

MessageVerifier 和 MessageEncryptor 构造函数现在接受 :urlsafe 选项。启用后,此选项可确保消息使用 URL 安全编码。

支持在没有区块的情况下以降序调用 in_batches

所有批处理方法 现在可以 以降序调用。此变更在没有区块的情况下调用时向 in_batches 添加了此功能。

允许在数据库已存在但为空时 db:prepare 加载架构

以前,如果数据库存在但尚未填充表,db:prepare 将运行所有迁移。
现在,db:prepare 将加载架构,然后运行任何剩余迁移,以使数据库达到状态。

自上次以来,84 位 Contributors 为 Rails 做出了贡献。和往常一样,有太多变更无法一一介绍,但您可以在 此处查看所有变更。下期再见!