我正在开发基于angularjs和rails的单页面应用程序。我使用RABL来呈现JSON文件。 许多JSON响应需要嵌套属性,如
child :tags do
attributes :id, :name
end
child webapp.comments do |t|
// with other nested attributs like user for comments...
extends "comments/index"
end
child webapp.category do |t|
attributes :id, :name
end
child webapp.user do |t|
extends 'users/show-lazy'
end
node(:image_url) { |webapp| webapp.image_url(:medium) }
我有一些性能问题,因为RABL渲染视图需要大约800毫秒(有一个用户请求!)(活动记录,只有50毫秒)。太长了。我还没有激活缓存。根据Github https://github.com/nesquena/rabl/issues/49上的这个相关问题,嵌套属性可以减慢渲染速度......
我的问题:如果生成嵌套属性需要很长时间,发送不同的请求会更好吗: get / myresource get / comments /:id / myresource get / tags /:id / myresource
你有什么看法?答案 0 :(得分:1)
如果生成嵌套属性需要很长时间,发送不同的请求会更好吗?
取决于:
如果客户端必须立即发出这些请求,速度是一个问题,那么它将取决于是否可以在处理单个请求之前处理所有这些请求。这取决于您处理请求的服务器数量以及是否可以一次(或几乎一次)处理多个请求。
如果客户端不需要那些其他资源,甚至可能根本不需要它们,那么单独的请求可能会更好,但它会影响客户端的设计,所以你必须把它带入考虑。
我可能还有其他一些错过的东西,但对于初学者来说这些是两个。
更多事情:
您可以在查询中使用include:
/ .includes(...)
或加入(s)来减少n + 1吗?
您是否还将JBuilder和ActiveModel::Serializers视为RABL的替代方案? JBuilder是Rails 4的一部分,ActiveModel :: Serializers由一些核心Rails团队成员开发。
如果您想避免大量服务控制器实施,请查看restful_json。