我想提高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.0
与active_model_serializers (0.10.2)
任何指针都会有很大的帮助。