gpt4 book ai didi

json - as_json 运行速度非常慢(Mongoid + Sinatra)

转载 作者:可可西里 更新时间:2023-11-01 09:53:03 25 4
gpt4 key购买 nike

我将 Sinatra (1.3.2) 与 Mongoid (2.4.10) 结合使用。我注意到将大约 350 个 mongo 文档转换为 JSON 需要很长时间。

我添加了一些基准包装器只是为了看看什么花费的时间最多:

get '/games' do
content_type :text
obj = nil
t1 = Benchmark.measure { @games = filtered_games.entries }
t2 = Benchmark.measure { obj = @games.as_json }
t3 = Benchmark.measure { obj.to_json }
"Query: #{t1}\nTo Object: #{t2}\nJSON: #{t3}"
end

(filtered_games 仅使用 URL 中传递的参数返回 Mongoid 查询的结果)

这是一个典型的回应:

Query: 0.100000 0.000000 0.100000 ( 0.234351)

To Object: 3.560000 0.010000 3.570000 ( 3.569813)

JSON: 0.220000 0.000000 0.220000 ( 0.217941)

因此,它看起来大部分时间只是将 Mongoid 对象转换为基本的 JSON 结构 (as_json)(超过 3.5 秒),而不是将该结构转换为 JSON 字符串。

文档不是很大(每个文档大约 450 字节,15-20 个字段)。

我想真正让我感到困惑的是,执行对 Mongodb 的实际查询、解析响应并将其反序列化为 Mongoid 对象所花费的时间要快得多..

这是为什么?关于如何进一步优化它的任何建议?我想我可以只使用对 Mongo 的 native 调用并返回这些结果,但我希望能够继续使用我在 Mongoid 中定义的范围。

编辑:我之前实际上并没有在第一个基准测试中运行查询,因为 Mongoid 延迟加载直到 as_json 调用。

最佳答案

因此,事实证明,回滚到以前版本的 Mongoid 解决了这个问题。我猜这是因为它引入了早期版本的 Active Model 或 Active Support。

  • 蒙戈:1.4.0
  • Mongoid:2.3.5
  • 活跃模型:3.1.6
  • 积极支持:3.1.6

这些是新的基准测试结果:

Query: 0.110000 0.010000 0.120000 ( 0.243558)

To Object: 0.200000 0.000000 0.200000 ( 0.196342)

JSON: 0.440000 0.000000 0.440000 ( 0.444311)

如果我有机会深入研究代码,我会尝试回来更新我发现的任何内容。

关于json - as_json 运行速度非常慢(Mongoid + Sinatra),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10986300/

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