我目前正在开发一个使用rails 5的api模式和角JS的SPA(shift planner)。 问题是浏览器需要1秒才能显示普通的JSON。 的JSON的结构是这样的:提高许多阵列JSON的性能
[
{
"id": 2,
"name": "person0",
"skills": [
{
"skill_id": 3,
"person_id": 2,
"name": "skill1"
},
{
"skill_id": 6,
"person_id": 2,
"name": "skill4"
}
],
"roles": [
{
"name": "role4",
"id": 5,
"person_id": 2
},
{
"name": "role8",
"id": 9,
"person_id": 2
}
],
"languages": [
{
"name": "language1",
"id": 2,
"person_id": 2
}
],
"shifts": [
{
"date_of_shift": "2016-02-29T00:00:00+00:00",
"shift_id": 1011,
"shift_type_id": 1,
"name": "shift_type0"
},
{
"date_of_shift": "2016-03-01T00:00:00+00:00",
"shift_id": 1012,
"shift_type_id": 2,
"name": "shift_type1"
},
{
"date_of_shift": "2016-03-02T00:00:00+00:00",
"shift_id": 1013,
"shift_type_id": 4,
"name": "shift_type3"
},
{
"date_of_shift": "2016-03-03T00:00:00+00:00",
"shift_id": 1014,
"shift_type_id": 8,
"name": "shift_type7"
},
{
"date_of_shift": "2016-03-04T00:00:00+00:00",
"shift_id": 1015,
"shift_type_id": 1,
"name": "shift_type0"
}
]
},
所以每个人都有约40元,我有50人(因为我想要显示的部门)在我的测试数据,这导致了2000 JSON元素。 所以我做了一些research显示json的速度有多快,看起来就像4年前,它比我的体验快得多。
这将是请求的railsserver的输出。
Completed 200 OK in 913ms (Views: 18.8ms | ActiveRecord: 73.3ms)
当我让所有的人都在通过API的DB(2000年)为JSON
只需要300毫秒来完成显示JSON。
服务器输出:
Completed 200 OK in 335ms (Views: 329.8ms | ActiveRecord: 4.6ms)
现在只需要方式更多的时间来呈现在服务器端的观点,但在活动记录和视图中花费的时间是一样的总时间,而在另一个API调用活动记录和视图只需要100毫秒和800毫秒花费做不同的事情。
人们JSON会是这个样子:
[
{
"id": 1,
"name": "jonny",
"department_id": 1,
"created_at": "2016-02-04T13:33:34.357Z",
"updated_at": "2016-02-04T13:33:34.357Z"
},
只有2000次。
我使用psql query获取数据,它给我提供了我需要的数据。我不会在轨道上做任何其他事情。
这种行为对我来说非常混乱。有人可以解释这些差异以及它们为什么会发生,并希望在第一种情况下如何提高性能。
编辑:我试图从技能,角色和语言数组中删除person_id,但它几乎没有影响性能。
[this](http://pastebin.com/XZCL7kq2)是我的psql查询。我花了上一周的时间从1秒进行优化,只花费70毫秒(根据服务器日志)。查询完全给我我需要的东西。我没有在数据轨道上做任何其他的事情,尽管把它作为json – Elux91
很好,如果没有花费时间在视图和模型中,mb花费这么长的时间来将查询的响应格式化为json之前发送给浏览器。 – Elux91
这将是我的下一个猜测。你使用哪个json解析器?我不确定'oj'是否兼容rails 5,但可以尝试,因为它已知相对较快:https://rubygems.org/gems/oj/ –