Joh*_*gle 44 json ruby-on-rails ruby-on-rails-3
我正在优化我们的Rails应用程序中的一些慢速事务,并且我看到了渲染JSON视图所花费的大量时间:
Rendered welcome/index.json.rabl (490.5ms)
Completed 200 OK in 1174ms (Views: 479.6ms | ActiveRecord: 27.8ms)
Run Code Online (Sandbox Code Playgroud)
假设API调用正在返回它需要返回的数据,那么在rails中呈现JSON的最快方法是什么?
我们使用Rabl是因为它能够轻松共享代码,但我们并不依赖它.
Gav*_*ock 43
目前oj似乎是最快的渲染器 - 击败yajl(根据oj作者的比较).
Oj在最新的multi_json中默认使用(并且rails默认使用mutli_json),因此交换到oj应该像在Gemfile中添加以下内容一样简单:
# Gemfile
gem "oj"
Run Code Online (Sandbox Code Playgroud)
然后每次调用render时,它现在都会使用oj.
render :json => { ... } # uses multi_json which uses oj
Run Code Online (Sandbox Code Playgroud)
如果你想要更高的性能,Oj还提供了额外的特定接口,但坚持使用multi_json可以在将来更容易地换掉宝石.
请注意,如果您有任何{ ... }.to_json
呼叫 - 除非您Oj.mimic_JSON
使用初始化程序,否则不会将这些呼叫升级为使用oj .
lul*_*ala 15
Rails 3使用multi_json,但它只用于json解码,而不是编码.Json编码/渲染/生成使用ActiveSupport JSON库的to_json
方法,因此总是很慢(即使你使用Oj gem).
您可以通过执行以下操作使用multi_json显式渲染:
render :json => MultiJson.dump(@posts)
Run Code Online (Sandbox Code Playgroud)
或者您可以尝试使用rails-patch-json-encode gem(由我),默认情况下将使用multi_json.它会影响所有内置to_json
方法,因此请确保所有测试都通过.
Eze*_*lin 14
Rabl multi_json
用于跨平台的兼容性,默认情况下不使用相当快的Yajl库.Rabl的配置文档解释了解决方案:
# Gemfile
gem 'yajl-ruby', :require => "yajl"
Run Code Online (Sandbox Code Playgroud)
如果仍然没有足够的性能,您可能想要探索不同的JSON序列化程序,如oj.您还可以检测渲染并查看瓶颈存在的位置.
归档时间: |
|
查看次数: |
19941 次 |
最近记录: |