easyui-combobox 下拉框查询数据过大

处理码表数据,有一个combobox下拉列表框查询数据的时候,数据量过大,导致查询的时候,页面崩溃。然后今天闲来无事就到公司加班处理这个问题。
最开始处理这个问题的时候,本身是没有问题,也不会出现过多的数据的,但是业务同事在录入数据的时候告知,里面缺少数据,然后我就查看了一下,发现我们本身是有一个处理的,就是跟据业务类型来做编码值的模糊查询所以每次查出来的数据不会超过50条,这个时候页面非常流畅,然后我就把跟据类型的模糊查询给去除了,然后在查询数据的时候,发现页面就卡死,因为周五有事情,就没有处理,然后给还原为之前的代码,等到今天才开始处理。
最开始的想法
我先百度了一下,发现有大佬提供说2000条数据处理,我自己查了一下我们的码表,大概有6W多条数据呢,他给的2000条数据的处理方法说是要用异步请求,我就给设置了一下async:true; 虽然我知道ajax默认就是异步加载的,但是我想尝试一下,结果肯定是预料之中。
接着先介绍一下ajax同步和异步的区别

async:true;   //异步
async:false;  //同步

异步:
在异步模式下,当我们使用AJAX发送完请求后,可能还有代码需要执行。这个时候可能由于种种原因导致服务器还没有响应我们的请求,但是因为我们采用了异步执行方式,所有包含AJAX请求代码的函数中的剩余代码将继续执行。如果我们是将请求结果交由另外一个JS函数去处理的,那么,这个时候就好比两条线程同时执行一样。
同步:
在同步模式下,当我们使用AJAX发送完请求后,后续还有代码需要执行,我们同样将服务器响应交由另一个JS函数去处理,但是这时的代码执行情况是:在服务器没有响应或者处理响应结果的JS函数还没有处理完成return时,包含请求代码的函数的剩余代码是不能够执行的。就好比单线程一样,请求发出后就进入阻塞状态,知道接触阻塞余下的代码才会继续执行。
一般默认值为true,异步。异步请求可以完全不影响用户的体验效果,无论请求的时间长或者短,用户都在专心的操作页面的其他内容,并不会有等待的感觉。
如何选择同步或者异步
我们在发送AJAX请求后,还需要继续处理服务器的响应结果,如果这时我们使用异步请求模式同时未将结果的处理交由另一个JS函数进行处理。这时就有可能发生这种情况:异步请求的响应还没有到达,函数已经执行完了return语句了,这时将导致return的结果为空字符串。

然后接着尝试,当时想的是把查询到的结果放到静态变量中,后来想了下如果放到静态变量中那么停止的时候一定是服务重启的时候,才会更新,于是就放到session中了,因为考虑变更不大,所以就没有加消息队列,然后在session中判断,session中是否有值,如果有值就取session中的值,如果没值,就重新查询数据库,然后接着尝试,结果还是不行。

没办法,只能用最后一招,就是用ajax访问静态json文件,先把查询出来的6万条数据转换为json数据
这里推荐一个excel转json的工具
http://tool.chinaz.com/tools/excel2json.aspx
使用方式就类似这样
在这里插入图片描述
在这里插入图片描述
6w多条数据处理完成后,查询结果还是依旧把页面查到崩溃。

最后发现这个问题,实际上和数据查询没有关系,数据查询已经很快了,主要是页面展示的时候崩溃了,所以和查询速度啥的没关系。

最终解决,因为刚开始我们是做了个处理的,就是根据类型做的模糊查询,后来和SAP确认数据的时候,SAP反馈,没有的就是没有,一切以他们为主,所以兜了一大圈还是不用改。

发布了168 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/G_whang/article/details/103756421