为啥 Ext.grid.GridPanel 很慢?

Posted

技术标签:

【中文标题】为啥 Ext.grid.GridPanel 很慢?【英文标题】:Why Ext.grid.GridPanel is slow?为什么 Ext.grid.GridPanel 很慢? 【发布时间】:2015-12-11 13:31:22 【问题描述】:

我正在使用 Ext.grid.GridPanel,版本 ExtJs3.4。至少需要 6 到 7 秒将 1000 条记录加载到网格中。 我的 java 部分在不到 1 秒的时间内给出了结果,但渲染 需要 6 到 7 秒。 可能是什么问题呢? 有什么可能的解决方案来提高性能? 这是我的代码。

var grid = new Ext.grid.GridPanel(
                title:gridtitle,
                border: false,
                height: getGridHeight(),
                autoScroll:true,
                store: store,
                id:'grid',
                colModel: createColModel(gridnoofcols),
                loadMask: true,
                view: new Ext.grid.GroupingView(
                    autoFill:true,
                    groupTextTpl: getGroupConfig(),
                    emptyText: emptytext,deferEmptyText: false
                ),
                listeners: 
                    render : function(grid)
                      grid.store.on('load', function(store, records, options)
                        grid.getSelectionModel().selectFirstRow();       
                      );                      
                    
                   ,
                plugins: [filters],        
                bbar: new Ext.Toolbar(
                )
    );

Following are the Column model

var createColModel = function (finish, start) 
    var columns = [
        new Ext.grid.RowNumberer(
            header: "<span style=font-weight:bold;><%=SLNO%></span>",
            width: 50
        ), 
            dataIndex: 'slnoIndex',
            hidden: true,
            header: "<span style=font-weight:bold;><%=SLNO%></span>",
            filter: 
                type: 'numeric'
            
        , <%=liveVisionColumns.getGridHeaderBuffer(processID,language,checkFDAS).toString()%>
    ];
    return new Ext.grid.ColumnModel(
        columns: columns.slice(start || 0, finish),
        defaults: 
            sortable: true
        
    );

【问题讨论】:

您为什么没有对查询进行分页以填充网格? Extjs 网格面板与分页配合得很好 我会尝试分页........实际上 Ext.ux.grid.livegrid.GridPanel 比 GridPanel 快,但它有一些问题,如过滤器,如果我们自动加载网格点击标题,但感谢您的宝贵意见。 您对 livegrid 过滤器有任何想法吗?过滤器不适用于 extjs3.4 livegrid? 【参考方案1】:

由于记录数量和分组视图的原因,它可能会很慢。但是,6-7 秒还是太多了。列模型可能是问题所在。列数和渲染器确实会减慢 extjs 网格。尽量避免使用列渲染器。 可以分享一下列模型吗?

【讨论】:

我已经编辑了我的帖子。请调查一下...请让我知道问题 我没有使用列渲染器,但是我的标题是动态的。有什么区别吗? 不,它没有。但是您仍然没有显示“liveVisionColumns.getGridHeaderBuffer”的结果。最后,您能做的最好的事情就是分析您的网格。覆盖 extjs grid_panel 将“console.log”放在里面的某个地方,看看什么需要这么长时间。注意:不分组视图也可以试试看结果吗? liveVisionColumns.getGridHeaderBuffer header: 'Vehicle No', dataIndex: 'vehiclenoindex', width:100, filter: type:'string ' , 看起来很简单。正如我所说,你应该分析你的网格。在我 8 年以上的 extjs 经验中,我做了很多次这样的事情,并解决了很多问题:) 只需挖掘网格面板源代码,将其复制到您的项目中,更改类名,将 console.log 添加到渲染方法,然后使用它而不是原始组件。

以上是关于为啥 Ext.grid.GridPanel 很慢?的主要内容,如果未能解决你的问题,请参考以下文章

将工具栏添加到网格并将其位置设置在 Ext.grid.GridPanel 的 tbar 上方

如何在 Ext.grid.GridPanel 的一行中添加颜色选择器

将行添加到Ext.grid.GridPanel

ext js 传入行号后grid自动选中

在 IE7 中,第一次单击网格会导致 ExtJS Ext.grid.GridPanel 跳转到页面顶部

ExtJS Grid Tooltip提示 鼠标悬停 项目案例