欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

浅谈grid的设计与性能

程序员文章站 2022-07-13 23:08:03
...

其实无论是入行开始还是到现在,对于grid自己也算比较多的研究和设计。从开始的jquery ui datagrid 到jqgrid 到阳哥的新作tangram grid再到自己的phoenix grid(自己的组件库的扩展ui控件)

 

慢慢地发现,一个完备的grid应该具备以下

 

1. 从性能角度出发的设计

 

 

  • 是否支持分页
     -----很多人觉得啊,这个当然了,是的,
          a .  分页在初始话数据render的时候,就表现的比较明显,特别是大数据量。
        
          b .  你的控件支持自定义的分页配置吗?因为很多项目在改造过程中可能有它自己的分页,只是tableToGrid
          c .   你的分页渲染的时候有图片的请求吗?还是直接用特殊字符►|这些来替代浅谈grid的设计与性能
            
    
    博客分类: 个人作品 grid设计(jquery ui custom的素材)
          d.    你的分页算法是否合理。
  • 关于滚动条
    -----这个一般如果你只是简单地去用jqgrid或者进行二次封装jquery ui grid的话你可能考虑的不是很多,或者你追求的是怎样才能设置width满铺,最大不出现滚动条
          a. 个人比较喜欢阳哥的做法:在渲染期多生成两个个div作为横向纵向,绑定事件
          b.  可能编写的时候需要考虑到兼容性(类似于我写的dommousescroll与mousewheel的区别)
  •  部分dom操作的优化
    -----举个简单的例子,我要编写开发的api如获取选中行(单行),获取选中行(多行)

 代码1: /**
	 * 获取选中行数据(只返回一行数据)
	 */
	getSelected:function(){
		//先判断是否有选中
                if(this.selectedRows.length>0){
		
		}else{
		       //没有选中返回null
                 	return null;
		}
	},

   /**
      *获取选中行数据(多行)
      */
      getSections:function(){
          var result=[],
                grid=this;
          //然后去遍历
         ....
         return result;
     },
 
 代码2:
/*
合并getSelected和getSelections
到getSelectRows
*/
getSelectRows:function(){
         //不判断是否有选中行
    var grid = this,
          result =[];
    //直接遍历
    。。。。。
   return result;
},

/*
getSelected 获取选中行数据(单行)
*/
getSelected:function(){
    var rows = this.getSelectRows;
    return rows.length >0 ? rows[0] : null;
},

/*
getSelection 获取选中行数据(多行)
*/
getSelection:function(){
   return this.getSelectRows;
}
 
          这个做法是jquery ui grid的思想来的,其实api的耦合度自己一定要把握好,设计模式的思想也可以参考进来。
          同样的做法可以在比如对列的显示和隐藏上面操作
  • 有没有好的事件冒泡控制
     这个其实还是说起来比较简单的,在点击cell的时候出发onCellClick----再到onRowClick

  •  有没有回收机制
    我们很明白,对于数据呈现的容器,每一次的dom操作是很多的,如何在重新render或者需要执行回收的时候去clear       一下。

  • 关于全选和取消全选按钮的操作的效率
    这个如果你用过jquery ui datagrid的话,你可能也抱怨过当数据量达到100条以上的时候,点击全选按钮,会出现3秒左右的延迟,下面的数据列才会勾选上。当然网络上很久前就有了解决方案。

    关于这点还是细说一下,我从以前接触到现在多还是支持我们的options可以设置selectMode(选中模式0-不选折 1-单选 2-多选)--或者很多人用过jqgrid的multiselect,但是还是希望细化到单选还是多选。 这样的属性去控制页面的渲染checkbox。

  • 关于渲染后的样式控制
    很多人会觉得Jqgrid这种tableToGrid后,样式太过冗余,所以我建议,如果你自己在设计grid的然后的时候一定区分好自己的文档树

  • 还有就是附加的功能插件
   现在的很多grid插件多支持拖拽,键盘操作,可编辑,导入导出(自己入行菜鸟的时候阳哥让写了导出excel不走后台,不过后来的方案还是不错,给出confirm的方式去选择请求后台返回数据java方式的模板导出,还是页面抓取数据进行导出。性能和选择方式的扩展让用户会感觉好一点)

  • 与表单和多个grid绑定的功能
  比如以前做的定义绑定默认新增修改删除的按钮,实现默认常见功能,让一般的开发者不用考虑过多的交互。当然如果有业务逻辑的话,可能就需要增加一些逻辑判断等等。

  • 困惑
  其实以前作为技术研发部门的一名开发人员,时常被各个产品线或者项目组抱怨你们设计的组件扩展性不是很好,其实一直在想,作为底层的编写人员,我们不应该过多地带入一些业务的逻辑到我们的grid里面,但是必要的接口还是得预先地预留好。这说的简单,但是这个“”的把握很重要。

  • 还是要说一下:一份好的说明文档会比什么多好,配置,api的例子也好或者ppt简介,(当然这一点很赞一下jqgrid的demo地址,以前一直准备自己写个jqgrid中文的详细文档的,一直没有完善到最后,完善后立刻上传大家学习用)会让别人更简单地去认识你这个东西:简单可信赖


简单地说了一些,日后继续补充吧。。。。。。。一个好的grid应该会慢慢地出来,慢慢地。。。。
  • 浅谈grid的设计与性能
            
    
    博客分类: 个人作品 grid设计
  • 大小: 861 Bytes
相关标签: grid设计