上一次导入数据后,发现系统十分的卡顿,可是才仅仅1000多条数据而已,怎么会让系统变得如何的卡顿呢?因而我开始走在排查系统卡顿的缘由的道路上。前端
首先,先定位问题是出如今前端上仍是后端上。打开浏览器,输入localhost:7000
, 而后F12打开netword。启动后端项目,查看log。切换回浏览器,右键刷新。结果发现好多些问题:react
从上面这几个现象能够看出:mongodb
好好分析一下,为何后端每一个接口的响应时间都会超过1s,mongodb是出了名的速度快,通常查询数据就几十ms,普通查询也不会超过300ms。可是看到的接口响应时间倒是超过了1s,有的仍是明显3,4s。后端
苦苦冥想,细细推测,思来想去,都不知道是怎么回事,最后只有采用删代码的方式来定位问题了。浏览器
当删除相似于下面的代码的时候性能优化
Schema.virtual('affixes', { ref: 'Affix', localField: '_id', foreignField: 'businessId', });
这个时候,发现后端接口的响应时间正常了,能够判断,这段代码起到了必定的做用,可是这只是简单的连表查询而已。为何就致使接口响应时间多那么多呢?性能
我继续分析,进入到controller.js里面,将与表关联查询的代码找出来,终于,我快要发现元凶了,删除这几行代码,ok,一样,响应时间正常了。优化
仔细分析这几行代码,发现了一个很重要的事情: 竟然是全表查询!!并且是3张表关联的全表查询!!因此...查询的数据差很少就是这个量: 2000 * 2000 * 2000, 也怪不得为何响应时间会超出1s了。code
第一个元凶已经被抓住了。可是我还并不知道为何前端从请求到渲染成功的时间怎么会超过10s,这简直不能忍。接口
清空network,而后刷新,从新发送请求,能够看见发送了5个左右的请求,而查看后端的log发现其中3个请求都是在作表关联的全表查询,而且reply的时候仍是将全部的数据都返回到前端里去了。
ok,如今我大概已经知道为何会有超过10s的响应时间了,下载的数据量也比较大,因此响应时间 = 发送请求时间 + 后端处理时间 + 下载资源时间 + 渲染时间, 因为数据量比较大,因此致使最后的两个时间也不小。
如今大概已经都找出了为何页面会卡顿而且迟缓。缘由就是没有作后端分页,系统里用的是前端分页。