gpt4 book ai didi

ruby-on-rails - Ruby 1.9 比 Ruby 1.8 慢?

转载 作者:数据小太阳 更新时间:2023-10-29 07:13:11 24 4
gpt4 key购买 nike

我有一个 Rails 2.3.8 应用程序,该应用程序具有从数据库中提取大量数据并使用 300-600 个部分(递归呈现树型结构)的任何地方呈现它的操作。对一个请求进行基准测试,我的响应时间约为 7 秒。

我认为将 Ruby 版本从 1.8 升级到 1.9 会提高性能,但当我对 1.9 版本进行基准测试时,我得到的响应时间约为 9 秒(比 1.8 慢 2 秒)。这让我非常惊讶。

哪些因素会导致 Ruby 1.9 的执行速度低于 Ruby 1.8?

以下是日志文件的一部分。

ruby 1.8

Rendered family_index/descendants/_fi_hover (0.5ms)
Rendered family_index/descendants/_descendant (4.6ms)
Rendered search/_search_div (0.1ms)
Rendered family_index/descendants/_fi_hover (0.7ms)
Rendered family_index/descendants/_descendant (4.7ms)
Rendered search/_search_div (0.1ms)
Rendered family_index/descendants/_fi_hover (0.5ms)
Rendered family_index/descendants/_descendant (4.5ms)
Rendered family_index/descendants/_fi_hover (0.5ms)
Rendered family_index/descendants/_descendant (37.9ms)
Rendered family_index/surname_groups/_pedigree (3162.9ms)
Rendered shared/_headers (4.6ms)
Rendered shared/_new_messages (0.6ms)
Rendered shared/_home_logo (1.1ms)
Rendered shared/_login_box (4.0ms)
Rendered shared/_navigation (13.6ms)
Rendered shared/_flash_messages (0.8ms)
Rendered shared/_footer (1.0ms)
Rendered shared/_analytics (0.8ms)
Completed in 4552ms (View: 3352, DB: 147) | 200 OK [http://localhost/family_index/surname_groups/31]

ruby 1.9

Rendered family_index/descendants/_fi_hover (0.3ms)
Rendered family_index/descendants/_descendant (1.9ms)
Rendered search/_search_div (0.1ms)
Rendered family_index/descendants/_fi_hover (0.4ms)
Rendered family_index/descendants/_descendant (2.0ms)
Rendered search/_search_div (0.1ms)
Rendered family_index/descendants/_fi_hover (0.3ms)
Rendered family_index/descendants/_descendant (1.9ms)
Rendered family_index/descendants/_fi_hover (0.3ms)
Rendered family_index/descendants/_descendant (15.1ms)
Rendered family_index/surname_groups/_pedigree (762.8ms)
Rendered shared/_headers (2.6ms)
Rendered shared/_new_messages (0.7ms)
Rendered shared/_home_logo (0.9ms)
Rendered shared/_login_box (3.6ms)
Rendered shared/_navigation (7.3ms)
Rendered shared/_flash_messages (0.7ms)
Rendered shared/_footer (0.8ms)
Rendered shared/_analytics (0.6ms)
Completed in 5736ms (View: 942, DB: 128) | 200 OK [http://localhost/family_index/surname_groups/31]

看起来 Ruby 1.9 渲染 View 和处理数据库的速度更快,但完成请求的速度仍然较慢。

ruby 1.8:

Completed in 4552ms (View: 3352, DB: 147) | 200 OK [http://localhost/family_index/surname_groups/31]

ruby 1.9:

Completed in 5736ms (View: 942, DB: 128) | 200 OK [http://localhost/family_index/surname_groups/31]

2010 年 10 月 26 日更新

我发现了代码中的瓶颈。它来自使用惰性加载关联加载大量 ActiveRecord 项的代码行。数据库时间很小,但我猜所有的对象分配都会造成损失。这是我的协会:

has_many  :deep_branches,
:class_name => "FamilyIndex::Branch",
:include => {
:descendant => [:state, :county, {:wives => {:marriage => [:state,:county,:reference] }}, :reference, {
:children => [:state, :county, {:wives => {:marriage => [:state,:county,:reference] }}, :reference, {
:children => [:state, :county, {:wives => {:marriage => [:state,:county,:reference] }}, :reference, {
:children => [:state, :county, {:wives => {:marriage => [:state,:county,:reference] }}, :reference] # add marriages to this data
}]
}]
}]
}

如果不进行预先加载,整个操作大约需要 40 秒才能完成,因此使用 :include 可以将性能提高大约 10 倍。仍在寻找加快速度的方法。也许缓存是唯一的出路。

最佳答案

1.9 可能比 1.8 慢的一个领域是字符串处理。

由于 1.9 具有适当的 unicode 支持索引或切片 unicode 编码的字符串可能比 1.8 花费更长的时间,因为在 1.8 中 string[i] 将只返回 ith 字节,而在 1.9 中它必须遍历字符串以找到第 i 个字符。

如果您进行大量字符串处理并且不需要适当的 unicode 支持,您可以将编码设置为 ASCII 或可能的二进制,这应该会大大加快字符串处理速度。

关于ruby-on-rails - Ruby 1.9 比 Ruby 1.8 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3997212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com