【问题标题】:AgGrid JSON date column, sorting filtering is slow for huge dataAgGrid JSON日期列,大数据排序过滤慢
【发布时间】:2022-03-02 15:09:53
【问题描述】:

我在 AgGrid 中有一个 JSON 日期列,其中包含 20K + 记录。我正在使用日期比较器对日期进行排序。有没有比下面更好的方法来对此类日期类型进行排序,因为我在对大型数据集进行排序和过滤时遇到应用程序缓慢的问题。

用于排序

 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. 我正在使用 moment 进行日期操作
  2. Excel 导出需要 JSON 日期。否则 processCellCallback 在大数据的情况下是昂贵的。 我对 excel 格式做了一些修改,否则 excel 会将日期显示为数字。
  3. 我们拥有 Ag-Grid 的企业许可证

【问题讨论】:

  • 你找到解决办法了吗

标签: date ag-grid


【解决方案1】:

至少在按日期排序时,我也遇到过类似的问题。不要使用 moment 来解析日期。这是减慢您正在使用的数据量的方法。而是使用 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;
            }

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

【讨论】:

    【解决方案2】:

    对于排序日期valueFormatter 功能有帮助。这对我有用,并且在对大型数据集进行排序时并没有放慢速度。

    {
     headerName: 'Date',
     field: 'date',
     valueFormatter: params => dateFormatter(params.value),
     sortable: true
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多