2016年7月24日,星期日

🚀 本周 Rails:String#blank? 性能翻倍,assert_changes 等!🚀

由 vipulnsward 发布

来自 Vipul. 的问候。

这真是忙碌的一周,主分支上有很多变化。
我们进行了大量的性能改进、错误修复、新增功能和增强。

我还以为大家都在玩 Pokemon Go 呢。 

Kasper 加入 Rails 核心团队!

没错,Kasper 获得了自己的卡通头像!

Kasper 帮助进行了无数次修改,并帮助其他人也进行了修改

他持续做出重要的个人贡献,例如新的局部集合缓存方案通配符模板依赖项,以及测试运行器的大幅改进

本周 Rails 贡献者

本周有 30 位杰出人士贡献了代码。其中有 2 位是首次将提交合并到 Rails。

非常感谢大家!❤️ 如果您希望下周也能看到自己的名字出现在这里,不妨看看当前问题列表?改进文档也是一个很好的起点!

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

String#blank? 现在使用 Regex#match?,并遵循了引入的 Regex#match? 的向后兼容添加。

这有助于在 Ruby 2.4 的新 Regex 改进下,性能提升高达 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 对象的更改而过期。

向 CollectionProxy 添加 exists? 和 update_all 以遵守关联作用域

此更改向 CollectionProxy 添加了 exists?update_all,以遵守关联作用域。

这在新版本的 Rails 中调用 update_allexists? 时会导致问题,例如当对一个集合对象(如 user.references.update_all(…))调用时。

修复

修复 ActiveRecord TimeZoneConverter#set_time_zone_without_conversion 中的错误

在此更改之前,多参数属性转换带有无效参数会导致问题,当 AR 的 time_zone_aware_attributes 被启用时,因为这会导致无效的转换。 

现在,新更改仅在有有效值可供安全转换时才尝试转换。

修复在作用域中将 merge 方法作为第一个调用

之前,将 merge 作为第一个方法来构建作用域会导致错误-

scope :unsafe_chaining, -> {​ merge(Comment.newest) }​ #=> NoMethodError

此更改现在允许我们克服这一点,并构建像以下这样的作用域-

scope :_chaining, ->{​merge(Comment.newest).joins(:comments) }​ # => OK_

改进

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

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

AEAD 模式(如 aes-256-gcm)提供机密性和数据真实性,无需使用 MessageVerifier 来检查加密数据是否被篡改。这加快了加密/解密速度,并产生了更短的密文。

在内部设置默认会话存储,不再通过 initializer

此更改删除了 config/initializers/session_store.rb 来通过 initializer 定义会话存储,并在内部设置默认会话存储。

默认情况下,会话存储将设置为 cookie 存储,并以应用程序名称作为会话键。

总结

本周 Rails 动态就到这里!还有许多其他伟大的贡献,在此无法一一列举,但欢迎您查看它们

下周再见!