如何减少响应为JSON的请求的响应时间?

时间:2014-11-22 05:53:58

标签: jquery ruby-on-rails ajax json ruby-on-rails-4

我有一个index.html页面,我在其中进行ajax调用,并获取ajax成功的JSON数据并将JSON发送到其他函数。

$.ajax({
    type : "GET",
    url : 'get_data',
    dataType : 'json',
    success: function(data) {
        update_page(data.info);
    }
})

在控制器中我有

  def get_data
    parents = Parent.all
    students = Student.all
    teachers = Teacher.all
    schools = School.all

    @collection = {"parents" => parents, "students" => students, "teachers" => teachers, "schools" => schools}

    respond_to do |format|
      format.json { render json: Oj.dump({"info" => @collection.to_json(:except=>  [:created_at, :updated_at] ) }) }
    end
  end

每个模型中有大约1500个记录。响应需要大量时间,内存消耗也很高。我已经使用new relic来跟踪响应时间,它使用了12000ms并使用了oinkrack mini profiler之类的其他工具,它显示了内存消耗和响应时间更高但我不确定如何解决这个问题。

请帮我解决这个问题。过去两天我一直在尝试,但我找不到解决办法。

提前致谢!

2 个答案:

答案 0 :(得分:1)

基本思路是仅查询所需的数据量。你真的需要所有记录(1500条记录* 4种模型= 6000条记录)吗?看看StackOverflow,有数千个问题,但在一个页面上,用户只需要查看大约50个问题。也许你想为你的页面实现分页。

<强>更新

如果在启动时加载所有记录是必须的。您可能希望查看浏览器脱机存储。您将加载所有数据一次,将其存储在浏览器中并使用脱机数据,而不是每个请求查询所有数据。这适用于Firefox。您可以轻松地找到类似其他浏览器的内容。

https://developer.mozilla.org/en-US/Apps/Build/Offline

答案 1 :(得分:0)

考虑磁盘或内存caching。无论是瓶颈,SQL查询还是JSON序列化,它都会在从磁盘提供时快速闪耀。第一个请求将被缓存,显然需要很长时间,但只需要一次。但是,您必须注意自己的缓存失效。我很确定它值得。

相关问题