gpt4 book ai didi

ruby-on-rails - 在 Controller 中优化 Rails 查询时遇到问题

转载 作者:行者123 更新时间:2023-12-03 16:55:48 24 4
gpt4 key购买 nike

我似乎无法弄清楚为什么我的总渲染时间与我的事件记录时间 + 我的生产日志中列出的查看时间不匹配。

这是我的生产日志的输出:

在 12508 毫秒内完成 200 OK( View :0.3 毫秒 | ActiveRecord:46.0​​ 毫秒)

这是我 Controller 中的代码:

store = Store.find(:vanity_url => params[:vanity_url])
render :json => store.get_pages_with_includes
return false

在我的 Store.rb 模型中,我使用两种方法来呈现我的模型及其所有事件关系的 json 表示。这是预加载方法:

def eager_load_pages
pages = Page.where(:store_id => self.id).includes(
[{:menu_items =>
[
:sizes,
{:topping_groups =>
{:toppings => :sizes}
}
]
},
{:combos =>
{:combo_item_groups =>
{:combo_items =>
[
:sizes,
{:topping_groups =>
{:toppings => :sizes}
}
]
}
}
}]
).order('position ASC')
return pages
end

这里是 to_json 方法

def get_pages_with_includes
pages = self.eager_load_pages
return pages.to_json({:include =>
[{:menu_items =>
{:include =>
{:topping_groups =>
{:include =>
{:toppings =>
{:include =>
:sizes
}
}
}
}
}
},
{:combos =>
{:include =>
{:combo_item_groups =>
{:include =>
{:combo_items =>
{:include =>
[:sizes, :topping_groups =>
{:include =>
{:toppings =>
{:include =>
:sizes
}
}
}
]
}
}
}
}
}
}]
})
end

所有代码都有效,但我不确定是否可以提高它的效率。我感到困惑的是为什么总页面加载时间甚至不接近运行查询所需的时间。谁能帮我吗?请??该页面在技术上应该在不到 50 毫秒内加载,但它需要 12508 毫秒!

如有任何帮助,我们将不胜感激!

------------更新------------我从我的服务器运行 top 并注意到在这些查询期间 ruby​​ 占用了 100% 的 CPU。这里有什么想法吗?也许这指出了问题...?

最佳答案

很可能是在您的 Controller 中呈现为 JSON 所花费的时间太长。您要渲染多少条记录?如果您的 Ruby 进程正在占用所有可用的 CPU,这意味着它与您的数据库没有(直接)相关,但可能是以下任何一种:

  • 实例化您数据库中的对象(如果您要检索 10,000 条记录);
  • 将这些对象呈现为 JSON。

查看您的页面加载时间(Views: 0.3ms | ActiveRecord: 46.0ms) 我会说这是对 JSON 的呈现。它不会显示在 Views 下,因为您没有使用任何 View ,而只是直接在 Controller 中调用渲染操作。

我建议您在您的应用中添加一些工具(例如 New Relic RPM)或者甚至是简单的基准测试方法来找出是什么花费了这么长时间。

您可能还想考虑使用更快的 JSON 解析器/渲染器而不是默认的解析器/渲染器。查看 multi_json gem。

关于ruby-on-rails - 在 Controller 中优化 Rails 查询时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16848064/

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