2019 年 6 月 30 日星期日

☀️🏖🏄‍♀️ 和模式缓存去重加上 getutc 暗去

作者 kaspth

大家好!🚢 本周我们来航行 Rails 新闻。对很多 Rails 贡献者来说,夏天已经真的到了炙热难耐的程度:我们看到的投稿减少了。留神!你可靠的船长 Kasper 在此向你保证,本船什么都没有出问题,只是夏天的调料而已。但发动机也着火了?哦,好吧,它可能很快就会烧毁,然后再纠正一项错误!这是正常的。🔥

模式缓存:去重结构

本周主要是 Active Record 的模式缓存强势出击,新增了不多于 3 项改进。这是一个鲜为人知的功能,但每次启动新服务器时,它都能避免对模式查询数据库(如果你要启动多个应用程序服务器,这会很方便)。你调用它,方法是...

模式缓存:停止序列化并解析 columns_hash

rails schema:cache:dump,详细了解其文档以了解更多信息。这 3 项更改通过去重解决了模式缓存在一个正在运行的应用程序中占用的内存。基本上是在对象上运行一个 uniq 并复用已经初始化的对象。这种技术并不常见,但在这里很有效,因为很多表格共享相同的列,例如 idcreated_atupdated_at 等。所以第一个更改...

模式缓存:在使用 init_with 时去重

...对模式缓存中的大多数内容运行去重。第二个更改跳过将 columns_hash 存储在 YML 中,因为它可以用 columns.index_by(&:name) 派生。因此,再次节省了存储每个列对象,而是只嵌套在名称下。简洁!完善这些功能:在解析 YML 和调用 init_with 的解析器时也应运行去重。解决了,呼!我建议你查看所有这三项更改,因为它们展示了如何通过多个 PR 重新设计一个功能。

Active Record:序列化时避免冗余 time.getutc

最后,完善新闻:速度更快了!目前,序列化一个 时间 属性将在多个位置运行 time.getutc,而不管时间是否已经是 UTC,这相当昂贵。此更改检查时间是否已经是 UTC,并且不会进行任何不必要的转换。⏱

21 人 在过去两周内为 Rails 做出贡献。你可以在此处查看完整更改列表。

敬请期待下次更新!