Как использовать ag-grid Export, чтобы превзойти функциональность с большими данными (50000 строк) с Angular 6 (ошибка OUT OF MEMORY)? - PullRequest
0 голосов
/ 19 февраля 2019

В настоящее время я работаю с экспортом, чтобы превзойти функциональность в ag-grid с угловым 6 с большими данными 50 000 строк?

Когда у меня меньше 1000 записей данных, я могу легко загрузить файл (<1во-вторых), но при увеличении данных до 50000 строк мой веб-браузер перестает отвечать на запросы, и через некоторое время я получаю сообщение об ошибке Chrome «Что-то пошло не так».Мой код </p>


onBtExport() {
var params = {
    suppressTextAsCDATA: true,
    allColumns:true,
    onlySelected: false,
    fileName:this.elementRef.nativeElement.querySelector('#fileName').value,
    sheetName: 
    this.elementRef.nativeElement.querySelector('#sheetName').value
};
//this.gridApi.exportDataAsExcel(params);
var content = this.gridApi.getDataAsExcel(params);
var workbook = XLSX.read(content, {type: 'binary'});
var xlsxContent = XLSX.write(workbook, {bookType: 'xlsx', type: 'base64'});
download(params, xlsxContent);
}

С данными сетки около 1000 строк. Это работает абсолютно нормально, я могу загрузить файл в браузере примерно за 1 секунду, но по мере увеличения данных до50000 строк. Мой браузер перестает отвечать на запросы.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Данные в AG-Grid сохраняются в памяти, если размер превышает хром, выдает ошибку Out Of Memory.У меня была похожая проблема, когда при экспорте 50 000 и более данных через Ag-Grid браузер падал для нескольких пользователей.Ниже приведены некоторые вещи, которые можно рассмотреть

  1. Вместо использования метода API сетки создайте метод на стороне сервера для экспорта больших данных
  2. Экспорт в CSV выполняется быстрее, чем экспорт в Excel, но вы будетене получить форматирование
  3. Попробуйте приведенный ниже код, который я использую, но это не 100% полное доказательство, но помогает уведомить пользователя о том, что какое-то действие происходит в фоновом режиме

     $scope.onBtExportXls = function () {$scope.agGridOptions.api.showLoadingOverlay();
    
    setTimeout(function () {
    
    content = this.gridOptions.api.getDataAsExcel(xlsExcelParams);
    
    var blobObject = new Blob(["\ufeff", content], {
            type: "text/csv;charset=utf-8;"
        });
    
    if (window.navigator.msSaveOrOpenBlob) {
        window.navigator.msSaveOrOpenBlob(blobObject, fileName);
    }
    else {
        // Chrome
        var downloadLink = document.createElement("a");
        downloadLink.href = window.URL.createObjectURL(blobObject);
        downloadLink.download = fileName;
        document.body.appendChild(downloadLink);
        downloadLink.click();
        document.body.removeChild(downloadLink);
    }      
    $scope.agGridOptions.api.hideOverlay();
    }, 50);};
    
0 голосов
/ 20 февраля 2019

У вас есть несколько вариантов решения этой проблемы: 1) загрузить как можно больше строк, затем загрузить вторую часть, третью ... и т. Д. Вы можете сделать это с помощью exportDataAsExcel (params), где params являются реализациями BaseExportParams, который имеет несколько полейНапример, вы можете использовать только выбранное.2) Более удобный способ сделать это - создать бэкэнд-сервис без использования ag-grid api.

...