2

编辑 - 这不是一个旨在抨击 Rails 的线程!我喜欢 Rails,我只是想完全理解这些差异。

编辑 2 - 找到一篇非常简洁的文章,看起来它可能与如何实例化具有简单类或多维数组的对象有关。http://merbist.com/2012/02/23/quick-dive-into-ruby-orm-object-initialization/

我最近开始从 PHP/Codeigniter 转换到 Ruby/Rails。我现在主要只是在玩 Rails,以了解它是如何工作的。

我最初担心的是性能。我有一个“位置”模型,它存储有关位置的一些信息。大约 10 个 varchar 列。总共有4000条记录。我设置了两个比较 CodeIgniter 和 Rails 的快速测试。

ruby​​/rails位置索引视图中,我运行Location.all. 如果我然后呈现一个空视图,页面上的初始响应时间约为 400-500 毫秒。没有Location.all是稳定的 20 毫秒。

php/codeigniter中,我可以做完全相同的事情 ( $this->db->get('locations')->result_array())。页面上的初始响应大约为 100 毫秒。在没有实际提取所有记录的情况下,我的响应时间是稳定的 30 毫秒。

我知道一次实际加载 4000 条记录可能是不现实的,但让我害怕的是性能上有这么大的差异。谁能解释发生了什么,如果有什么我可以做的来避免这种情况。100ms 与 500ms 是 5 倍的性能差异!到目前为止,我喜欢rails,所以不要把它当作一种抨击,只是想把我的头绕在它周围。

红宝石/铁路截图

红宝石/导轨

PHP/代码点火器

php/codeigniter

4

1 回答 1

0

当您调用Location.all它时,它正在实例化 4000 个对象;当你在 Rails 中实例化一个对象时会发生很多事情。

如果您关心应用程序的性能,无论您使用 php 还是 rails,您都可能会进行大量缓存。在这种加载大量对象的情况下,可以使用 IdentityCache 之类的东西来缓存它们:

https://github.com/Shopify/identity_cache

干杯,

于 2013-05-22T18:29:02.513 回答