AgGrid JSON日期列,对大量数据进行排序过滤很慢

时间:2018-04-24 05:50:00

标签: date ag-grid

我在AgGrid中有一个带有20K +记录的JSON日期列。我使用日期比较器来排序日期。下面是否有更好的方法来排序这样的日期类型,因为我在对大量数据集进行排序和过滤时,我的应用程序经历了缓慢。

排序

 comparator: function (date1, date2) {
                var date1Number = fnDateToComparableNumber(moment(date1).toDate());
                var date2Number = fnDateToComparableNumber(moment(date2).toDate());

                if ((date1Number === null || isNaN(date1Number)) && (date2Number === null || isNaN(date2Number))) {
                    return 0;
                }
                if (date1Number === null || isNaN(date1Number)) {
                    return -1;
                }
                if (date2Number === null || isNaN(date2Number)) {
                    return 1;
                }

                return date1Number - date2Number;
            }

过滤

filterParams: {
                //applyButton: true,
                clearButton: true,
                // provide comparator function
                comparator: function (filterLocalDateAtMidnight, cellValue) {
                    // We create a Date object for comparison against the filter date
                    if (cellValue == '') {
                        return 1;
                    }

                    var cellDate = moment(cellValue).toDate();

                    // Now that both parameters are Date objects, we can compare
                    if (cellDate < filterLocalDateAtMidnight) {
                        return -1;
                    } else if (cellDate > filterLocalDateAtMidnight) {
                        return 1;
                    } else {
                        return 0;
                    }
                }
            },

注意:

  1. 我正在使用时间进行约会操作
  2. excel导出需要JSON日期。在大数据的情况下,其他processCellCallback也很昂贵。 我已经为excel格式做了一些破解,否则excel会将日期显示为数字。
  3. 我们拥有Ag-Grid的企业许可证

1 个答案:

答案 0 :(得分:0)

至少按日期排序我有类似的问题。不要使用片刻来解析日期。这是减慢您正在使用的数据量的方法。而是使用Date():

 comparator: function (date1, date2) {
                var date1Number = fnDateToComparableNumber(Date(date1));
                var date2Number = fnDateToComparableNumber(Date(date2));

                if ((date1Number === null || isNaN(date1Number)) && (date2Number === null || isNaN(date2Number))) {
                    return 0;
                }
                if (date1Number === null || isNaN(date1Number)) {
                    return -1;
                }
                if (date2Number === null || isNaN(date2Number)) {
                    return 1;
                }

                return date1Number - date2Number;
            }

也许您需要手动解析日期,但仍然比使用时刻更快。