Ruby on rails 呈现JSON:嵌套属性还是不同的请求?

Ruby on rails 呈现JSON:嵌套属性还是不同的请求?,ruby-on-rails,json,performance,rabl,Ruby On Rails,Json,Performance,Rabl,我正在开发一个基于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...

我正在开发一个基于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上的这个相关问题,嵌套属性会降低渲染速度

我的问题:如果嵌套属性的生成需要很长时间,是否最好发送不同的请求,如: 获取/myresource get/comments/:id/myresource get/tags/:id/myresource

你的意见是什么

如果嵌套属性的生成需要很长时间,那么发送不同的请求是否更好

这取决于:

  • 如果客户机必须立即发出这些请求,并且速度是一个问题,那么它将取决于是否所有这些请求都能在单个请求得到处理之前得到处理。这取决于处理请求的服务器数量,以及是否可以一次(或几乎一次)处理多个请求

  • 如果客户机不需要这些其他资源,甚至可能永远也不需要它们,那么单独的请求可能会更好,但它会影响客户机的设计,因此您必须考虑到这一点

我可能还错过了其他一些东西,但这是两个开始

还有一些事情:

  • 您可以在查询中使用
    include:
    /
    .includes(…)
    或join(s)来减少n+1吗

  • 您是否也将和视为RABL的替代方案?JBuilder是Rails 4的一部分,ActiveModel::Serializer由Rails的一些核心团队成员开发

  • 密切关注项目(也可以提供反馈)

  • 如果您想避免大量的服务控制器实现,请看一看


答案取决于很多因素……有多少延迟与网络和服务器相关,有多少数据,您对API的控制有多大,等等。我更喜欢在需要详细信息之前向用户显示内容时进行分块。我使用了include:。最后,我决定切换到ActiveModel::Serializers。我的响应速度从800毫秒提高到350毫秒!不幸的是,缓存系统似乎不是由ActiveModel::Serializer实现的。所以,我想看看JBuilder!