2008 年 6 月 25 日星期三

写在边缘(或 Edge Rails 中的新内容)第 2 部分 - 性能提升

由 Chu Yeow 发布

第一篇写在边缘的文章涵盖了自 Rails 2.1 以来的一些 API 变更,这次我将按照承诺介绍性能提升

现在就开始…

更快的 Erb 模板

Jeremy Kemper 提高了 Erb 处理的效率,尤其是 concatcapture 帮助器方法。

“特殊”Erb _erbout 已替换为实例变量,其优势在于

  • 更好的(内存)性能,因为不再传递绑定
  • 更少的 eval,通常很昂贵,
  • 当你可以在新的(字符串)缓冲区中交换时,不再需要切片 _erbout 变量,以及
  • 实际上,可以通过 output_buffer 的读写器方法使用缓冲区(因此如果你需要,可以覆盖它)。

相关变更集:933697a
- 0bdb7d3
- 4d4c8e2

更快的局部和 JavaScript 帮助器

局部模板初始化和 JavaScript 帮助器已通过 Jeremy Kemper 进行重构和优化,以提高速度和效率。这些只是 Jeremy 最近提交的优化中的一部分。确保查看一些Rails 提交(或者任何高质量的开源项目)——你可能会学到一些东西!

相关变更集:局部JavaScript 帮助器

RecordIdentifier 方法速度提升

RecordIdentifier通过简单地使用记忆化加快了速度,从而减少了执行的变格数,以及其他操作。RecordIdentifier 广泛用于缓存键、局部模板路径,以及在大多数你在其中识别 ActiveRecord 模型但又不需要其实际id 的位置。

Jeremy Kemper 的相关变更集:c1a9820566d717

延迟加载缓存和会话存储

更新:抱歉,此更改稍后在6573f6a 中被还原。

ActiveSupport::Cache 模块里的各种缓存存储都是需要 lazy load 的——这意味着它们仅在你开始实际使用时才会被 require

Pratik Naik 的变更集