2005 年 7 月 8 日,星期五

使用 0.13 之后是否感觉速度变慢了?

由 admin 发布

具有讽刺意味的是,我们称 Rails 0.13 是 Rails 性能的巨大进步,而之后邮件列表上的一半帖子却是关于“Rails 好慢的!”。但我们已经发现了问题。

第一个问题在于 MySQL/Ruby 绑定,只要调用 MySQL#free 就会调用 GC.start。而在 0.13 中我们刚刚放入 MySQL#free,以便在每次选择行后改善情况。这会导致在每次选择内容时运行垃圾收集器。啊哈!

C 绑定没有这个问题,因此核心团队并未立即发现它,而且在邮件列表中将其作为解决方案提出了。不幸的是,并非在所有平台上(尤其是 Windows)编译本机绑定都是非常简单的,因此拥有快速的 Ruby 绑定确实很重要。它们又恢复了速度,但是如果你已升级到 C 绑定,你一定会很高兴你的速度变得更快。

第二个问题是我们在开发模式下堵塞了一个大的内存泄漏,但这样做的结果是每次操作后都要总共运行 ObjectSpace 8 次(基本上是在解释器中对所有对象进行 8 次迭代,糟糕!)。在大型应用程序上,这可能需要一段时间。在 Basecamp 上,它需要 2 秒。在我们只遍历一次 ObjectSpace 的修复程序提出之后,它已经缩短到一个舒适的 0.2 秒(比修复内存泄漏之前甚至快了大约 0.17 秒!)。

因此,Rails 0.13.1 即将面世。比如本周末。如果你等不及,我们当然不会怪你,现在有新的测试版宝石,它们完全由 bug 修复组成。使用 gem install rails --source http://gems.rubyonrails.org --include-dependencies 进行升级。