Производительность mat-таблицы с 30 000 строк

#angular #performance #firebase #angular-material #mat-table

#angular #Производительность #firebase #angular-материал #mat-таблица

Вопрос:

Я использую Angular 6, Firebase и Angular Material.

У меня есть 30 000 объектов json, хранящихся в firebase, которые я хочу загрузить в mat-таблицу. Только я получаю намного меньше, чем хотел. Я жду 30 секунд, прежде чем смогу щелкнуть по своему приложению, иногда Chrome выдает ошибку…

Тем не менее, я загружаю свои данные после разбивки на страницы.

Может кто-нибудь сказать мне, нормально ли это или есть стратегия для преодоления этой проблемы? Спасибо.

Может быть, я могу сделать это с помощью angular 7 и добавить прокрутку? У вас есть примеры запросов?

 export class TableComponent implements OnInit {

    showSpinner = true;

    Data = {nom: '', finessgeo: '', cat1: '', commune: '', CP: '', departement: '', tel: ''}

    displayedColumns = ['nom', 'finessgeo', 'cat1', 'commune', 'CP', 'departement', 'tel'];

    dataSource = new MatTableDataSource();

    applyFilter(filterValue: string) {
        filterValue = filterValue.trim();
        filterValue = filterValue.toLowerCase();
        this.dataSource.filter = filterValue;
    }

    @ViewChild(MatPaginator) paginator: MatPaginator;

    @ViewChild(MatSort) sort: MatSort;

    ngAfterViewInit() {
        this.dataSource.paginator = this.paginator;
        this.dataSource.sort = this.sort;
        return this.geoService.getGeos().subscribe(res => {
            this.dataSource.data =
                res;
            this.showSpinner = false;
        });
    }

    constructor(public authService: AuthService, private geoService:
        GeoService, private router: Router, private database: AngularFireDatabase) {
    }

    ngOnInit() {}
}
  

Ответ №1:

У меня есть несколько предложений.

Первое: не загружайте все 30 тыс. строк клиенту. Попробуйте использовать разбивку на страницы на стороне сервера. Это должно все исправить. Также вы должны реализовать все свои функции фильтрации и сортировки в API. Используйте клиент только для отображения этих данных.

Если это не вариант:

  • Отсортируйте данные на сервере. Как можно скорее. Если вы можете, непосредственно внутри вашего запроса к базе данных.
  • Проверьте, добавляет ли ваш компонент все строки в DOM. Это заняло бы очень много процессорного времени.
  • Используйте вкладку performance в Chrome dev tools, чтобы проверить, что занимает так много времени. И попытайтесь ее оптимизировать.
  • Проверьте свой HTML-шаблон. Постарайтесь сделать строки как можно более простыми. Нравится меньше вложенных элементов, дополнительных классов и так далее.

Комментарии:

1. Спасибо за вашу помощь. Есть ли у вас пример разбивки на страницы на стороне сервера с angularfire и mat-table?

2. Я раньше не использовал firebase, но принципы для каждого API одинаковы. Нашел это видео , которое на первый взгляд выглядит хорошо.

3. Чтобы заполнить пагинатор правильными значениями, ознакомьтесь с документацией

4. Можете ли вы рассказать мне больше?

5. Если у вас есть конкретные вопросы, возможно, да.