我有一个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
并使用了oink
和rack mini profiler
之类的其他工具,它显示了内存消耗和响应时间更高但我不确定如何解决这个问题。
请帮我解决这个问题。过去两天我一直在尝试,但我找不到解决办法。
提前致谢!
答案 0 :(得分:1)
基本思路是仅查询所需的数据量。你真的需要所有记录(1500条记录* 4种模型= 6000条记录)吗?看看StackOverflow,有数千个问题,但在一个页面上,用户只需要查看大约50个问题。也许你想为你的页面实现分页。
<强>更新强>
如果在启动时加载所有记录是必须的。您可能希望查看浏览器脱机存储。您将加载所有数据一次,将其存储在浏览器中并使用脱机数据,而不是每个请求查询所有数据。这适用于Firefox。您可以轻松地找到类似其他浏览器的内容。
答案 1 :(得分:0)
考虑磁盘或内存caching。无论是瓶颈,SQL查询还是JSON序列化,它都会在从磁盘提供时快速闪耀。第一个请求将被缓存,显然需要很长时间,但只需要一次。但是,您必须注意自己的缓存失效。我很确定它值得。