2016 年 7 月 24 日(星期日)

🚀本周 Rails 动态:String#blank? 性能提升 2 倍,新增 assert_changes 等更多内容!🚀

作者 vipulnsward

Vipul 发来问候。

这周很繁忙,许多变更已提交到 master 分支。
我们实施了许多性能改进,修复了错误并新增了一些功能和增强。

我还以为每个人现在都在玩Pokemon Go呢。 

Kasper 加入 Rails 核心团队!

没错,Kasper 拥有了一张卡通头像!

Kasper 帮助进行了许多变更,也帮助其他人进行了许多变更。

他不断做出实质性个人贡献,比如新的部分集合缓存 方案通配符模板依赖项测试运行器的重大改进

本周 Rail 贡献者

本周有 30 位杰出开发者做出了贡献。其中 2 位开发者的提交首次合并到 Rails 中。

非常感谢你们所有人!❤️如果您希望在下周看到自己的名字,不妨看看当前问题列表?对文档进行改进也是一个不错的起点!

Ruby 2.4 中 String#blank? 性能提升 2 倍!

String#blank? 现在使用 Regex#match?,这是在引入Regex#match? 的反向兼容添加之后做出的。

借助 Ruby 2.4 中新的正则表达式改进,这有助于将性能提升 2 倍!

引入 assert_changes 和 assert_no_changes

ActiveSupport::TestCase 得到增强,可以使用assert_difference 以及更通用的用法。

借助这种方便的比较,我们现在可以执行类似如下内容的操作 -

user = User.start_registration
assert_changes ‘user.token’,from: nil,to: /\w{​32}​/ do
  user.finish_registration
end

对在操作之前和之后的各州进行封装。

新增

渲染集合时找回对可调用缓存键的支持

可调用自定义缓存键的支持已重新添加到视图缓存中。这支持我们执行如下操作

<%= render partial: ‘projects/project’,collection: @projects,cached: -> project {​ [project,current_user] }​ %>

并传递基于可调用代码块的键,该代码块支持我们基于调用的结果依赖缓存及缓存过期。在上述情况下,缓存将随着projectcurrent_user 对象的变更而过期。

将 exists? 和 update_all 添加到 CollectionProxy 以尊重关联范围

这一更改在 CollectionProxy 中添加了 exists?update_all 以遵循关联作用域。

在 Rails 的最新版本中,当对集合对象(如 user.references.update_all(…))调用 update_allexists? 时,都会引发问题。

已修复

修复 ActiveRecord TimeZoneConverter#set_time_zone_without_conversion 中的错误

在此项更改之前,在启用 AR 的 time_zone_aware_attributes 时,使用无效参数进行多参数属性的转换会引发问题,因为这会导致转换无效。 

现在,新更改仅在具有有效值时,才会尝试进行转换,以确保安全转换。

修复在作用域中将合并方法用作第一次出现的错误

之前,将合并用作构建作用域的第一个方法会导致错误 -

作用域 :unsafe_chaining -> { ​合并(Comment.newest) } #=> NoMethodError

现在,此项更改允许我们克服此问题,并构建如下所示的作用域 -

作用域 :_chaining ->{ ​合并(Comment.newest).joins(:comments) } # => OK_

改进

允许 MessageEncryptor 利用经过身份验证的加密模式

此项更改允许 MessageEncryptor 现在支持 经过身份验证的加密模式

aes-256-gcm 等 AEAD 模式可同时提供机密性和数据真实性,无需使用 MessageVerifier 检查加密数据是否被篡改。这加快了加密/解密速度,并缩短了密文长度。

在内部设置默认会话存储,不再通过初始化程序进行设置

此项更改删除了创建 config/initializers/session_store.rb,该文件通过初始化程序定义会话存储,并在内部设置默认会话存储。

默认情况下,会话存储将设置为使用应用程序名称作为会话密钥的 cookie 存储。

总结

Rails 本周更新内容已全部结束!还有许多其他重大贡献,不一一列举,但欢迎 查看

我们下周见!