检索许多记录时Rails与CodeIgniter的性能

时间:2013-05-22 17:25:57

标签: php ruby-on-rails ruby ruby-on-rails-3 codeigniter

编辑 - 这不是一个打击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-500ms。没有Location.all是稳定的20ms。

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

我知道实际上一次加载4000条记录可能并不现实,但令我感到害怕的是,性能差异很大。任何人都可以解释发生了什么,如果有什么我可以做的,以避免这种情况。 100毫秒500毫秒是性能差异的5倍!到目前为止,我喜欢铁轨,所以不要把它当作抨击,只是试着把头包裹起来。

RUBY / RAILS截图

ruby/rails

PHP /笨

php/codeigniter

1 个答案:

答案 0 :(得分:0)

当你致电Location.all时,它会实例化4000个物体;在rails中实例化对象时会发生很多事。

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

https://github.com/Shopify/identity_cache

干杯,