Firebase Удалить массив узлов замедлить рендеринг компонента - PullRequest
0 голосов
/ 10 мая 2019

У меня есть Angular7 компонент, который подключен к Базе данных реального времени в Firebase .

Компонент привязан к Массиву структурированных элементов вызывает "сигналы", и каждый раз, когда новый элемент добавляется в массив, компонент получает обновления.

Все работает правильно.

Проблема возникает из-за очистки массива... В этом случае кажется, что база данных в реальном времени удаляет элементы массивов один за другим, и для каждого удаленного элемента она продолжает передавать весь массив в компонент ...

это код:

Обязательная часть

ngOnInit() {

    this.db.list<RHSignal>('signals', ref => ref).valueChanges().subscribe(res => {      
      this.listSignal = res;
    })  
  }

функция, которая удаляет массив

ClearSignals(){
    this.db.object('signals').remove();
    alert('Signals has been removed !!!');
  }

Как видите, «сигнал»"узел (который может содержать более 200 структурированных элементов) удаляется одной командой, но привязка продолжает отправлять данные каждого удаленного элемента массива.

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

Мне нужен быстрый и лучший способo избежать этой проблемы.

Благодаря поддержке

1 Ответ

0 голосов
/ 10 мая 2019

Наконец я нашел решение:

После прочтения официальной документации по этой ссылке:

https://firebase.google.com/docs/database/web/read-and-write

Я узнал:

Удалить данные

Самый простой способ удалить данные - вызвать remove () для ссылки на расположение этих данных.

Вы также можете удалить, указав значение null в качестве значения для другой записи операция, такая как set () или update (). Вы можете использовать эту технику с update () для удаления нескольких дочерних элементов за один вызов API.

Итак, я изменил метод Clear следующим образом:

  ClearSignals(){

    var updates = {};

    updates['/signals'] = {};

    this.db.database.ref().update(updates);
    alert('Signals has been removed !!!');
  }

Теперь это действительно быстро!

...