easyui中datagrid数据删除问题(加快删除速度)

来源:互联网 发布:3d软件下载 编辑:程序博客网 时间:2024/06/06 04:21

上次说到项目中用到了easyui,不咋好用,有很多问题,但当自己去静下心来会发现,很多问题可以去解决,换个思路会豁然开朗。
这次要说下datagrid数据删除的问题,起因是做了一个表管理的页面(模仿数据库),可以在一个页面管理表,新增删除修改字段,关键出现了,对,就是字段的问题!
因为表可能有一百多个甚至二百三百的字段数,grid没有分页,是ajax请求后初始化表信息和字段信息的。在对字段操作的时候,会有批量删除,我开发的时候测试数据用了20个左右的字段,没问题。结果测试的时候,用的是真实表数据,有200个左右的字段,结果批量删除的时候,页面直接卡死!!!如果个人电脑性能好的话,会未响应一段时间后,恢复正常(数据也删除了),但怎么想客户都不会等这段时间……这个bug折磨了我很长一段时间,网上也没资料。
那时候活也多,没太细的去研究。后来空闲下以后,开始去解决。我发现全选后,就算只删除一条,速度也很慢,但在接受的范围内(勉强),去看源码,换方法去解决,始终没有看到光明。说到这要让大家看下删除的代码,大家能看出问题没:
var row = $(this.gridId).datagrid('getSelections');
if (row.length>0){
for(var i=0;i<row.length;i++){
var rowIndex = $(this.gridId).datagrid('getRowIndex', row[i]);
            $(this.gridId).datagrid('deleteRow', rowIndex);
}
}else{
$.messager.alert('提示','请选择要删除的数据!');
}
看上去很完美,几乎没啥可以去变动的地方(本人意思不要太去看细节,虽然本人已经很注意细节的写法),但问题就出在这里!
我尝试过重写'deleteRow的方法,结果是无解!
偶然真的是很偶然,在这里要插上一句,当你遇到一个无解的问题时,你要警惕自己是否进入了死胡同,这时候你要让自己去放松,去冷静,然后再去找解决问题的方法。
继续说偶然的事情,偶然看到了一个文章说的是datagrid删除的问题,给了我一个思路,那就是倒序删除!对,就是这么简单,因为datagrid删除的时候似乎会把下边的列向上移,想到这里恍然大悟!个人习惯了从0开始向上循环,结果遇到了一记闷棍呀!想象下像我之前的写法会有多少个移动,如果200条数据结果会是(199+198+……+2+1)+(198+197+……+1)+……+1这么多次移动,多大的消耗呀(大概会是如此,写博客没有去细算)!所以我改成如下代码:
var row = $(this.gridId).datagrid('getSelections');
if (row.length>0){
for(var i=row.length;i>0;i--){
var rowIndex = $(this.gridId).datagrid('getRowIndex', row[i]);
            $(this.gridId).datagrid('deleteRow', rowIndex);
}
}else{
$.messager.alert('提示','请选择要删除的数据!');
}
这样移动的代价是199+198+……+2+1!
差距呀,一个循环节省了多少性能!!!
或许你百思不得以解,可能蓦然回首后,那人正在灯火阑珊处!
各种朋友,这也是生活的态度!祝各位幸福!

原创粉丝点击