性能优化:Active Model Serializer

时间:2016-11-26 08:10:44

标签: ruby-on-rails ruby query-performance active-model-serializers

我想提高json生成的呈现ActiveModel::Serializer的效果。请在下面找到示例代码:

在控制器中,

render json: Abc.where(" flag = ?",true).order('created_at DESC').map{|p| XyzSerializer.new(p)}.to_json, :callback => params['callback']  

在AbcSerializer中,

class AbcSerializer < ActiveModel::Serializer   

attributes :attr1, :attr2, :attr3

def attr1
 store = PQR.find_by(id: object.id)
 store.name
end
def attr2
 store = PQR.find_by(id: object.id)
 store.pqr_association_tables.name
end
def attr3
  object.image.url
end

在XyzSerializer中,

class XyzSerializer < ActiveModel::Serializer

attributes :attr1, :attr2, :attr3

def attr1
 store = DEF.find_by(id: object.id)
 store.name
end
def attr2
 store = DEF.find_by(id: object.id)
 store.created_at
end
def attr3
  store = DEF.find_by(id: object.id)
  store.updated_at
end

在ABC模型中,

class Abc < ActiveRecord::Base
  has_many   :xyzs, dependent: :destroy
end

在Xyz模型中,

class Xyz < ActiveRecord::Base
  belongs_to   :abc
end

我得到了预期的输出。但是,这需要太长时间。例如,它需要更多than 15 seconds to fetch 1500 records

我也尝试了JBuilder gem。但是在性能方面没有任何区别。

模型DEF上的查询正在为每个对象执行三次,对于每个对象,模型PQR两次,可能是瓶颈。

我将Ruby 2.3.0 & Rails 4.2.0active_model_serializers (0.10.2)

一起使用

任何指针都会有很大的帮助。

0 个答案:

没有答案