Rails 4如何加速json渲染

时间:2014-10-24 16:05:21

标签: json performance ruby-on-rails-4 rendering jbuilder

我有1500个小对象来渲染rails 4应用程序中的web服务。我使用json作为格式与jbuilder模板。我已经在应用程序初始化程序中将json引擎更改为oj:

 require 'oj_mimic_json'
#MultiJson.use :yajl

Oj.mimic_JSON

# jbuilder json templates
Jbuilder.key_format camelize: :lower

单个渲染的json对象如下所示:

center: {lat: 45.962153536249, lon: 7.68207088549831}
lat: 45.962153536249
lon: 7.68207088549831
n: "Zermatt-Cervinia"
st: 80
sy: 0


Rendered json_partials/_snow_in_resort.json.jbuilder (0.5ms)
Rendered json_partials/_snow_in_resort.json.jbuilder (0.5ms)
....
Rendered resorts/find.json.jbuilder (4213.4ms)
Completed 200 OK in 4351ms (Views: 3924.3ms | ActiveRecord: 306.8ms | Solr: 0.0ms)

但是我的本地主机上仍需要150毫秒的101 kb,这对于我想在UI上完成的任务来说太慢了。 我需要做些什么来加速这里?我应该检查哪些事项? 我很感激帮助。 最好, 菲利普

更新

我将我的活动记录查询优化到ActiveRecord:77.8ms,但视图渲染仍然太慢

1 个答案:

答案 0 :(得分:6)

您可以使用Varnish探索使用HTTP缓存。这是一篇很棒的文章,描述了Rails 4中的不同缓存技术(片段缓存,HTTP缓存等)。它对缓存JSON响应有很好的解释。

Rails 4和缓存

http://www.slatestudio.com/blog/p/caching-in-rails-4-applications

这是Rails和Varnish的另一个

http://www.hward.com/scale-rails-with-varnish-http-caching-layer/

lacquer一个流行的宝石,可以直接支持rails中的清漆缓存

如果你想了解什么是HTTP缓存,那么这是一篇非常好的文章

https://www.mnot.net/cache_docs/

Ryan Bates有一篇关于Rails Cast的优秀教程,但它是专业剧集

http://railscasts.com/episodes/321-http-caching

UPDATE

Geocoder Gem

根据下面的一些评论,我建议考虑使用Geocoder gem。它已存在一段时间,并且针对兴趣点搜索进行了非常优化,就像您要尝试的那样。它还做得更多。

空间索引 如果您已经尝试过并且不满意,请您发布一些有关您在数据库中使用哪种优化以加快查询的详细信息?您可以通过在表上使用空间索引来显着加快POI查询的速度吗?

这是一篇关于空间索引的好文章:

http://daniel-azuma.com/articles/georails/part-6

  

一些性能测试想法

你可以通过提出一个好的测试用例来测试它是否确实是渲染,这会降低你的速度。尝试查询积分表顶部,中部和底部的内容。还适用于JSON中不同数量的响应对象,以及JSON对象中的不同数量的属性。 现在我看,那个lat,lon是多余的。尝试删除它们并比较大量结果的时间,如果确实是渲染会降低你的速度,减少属性,你应该看到更快的响应。

此外,如果您的属性(name,st,sy等..)来自关系而不是与点相同的表,请尝试对数据库进行反规范化,以查看是否获得更快的视图渲染..