Насколько быстро setValue FormControl действительно работает? - PullRequest
0 голосов
/ 28 января 2019

Например, у меня есть огромный массив строк, и количество строк продолжает увеличиваться с течением времени (я получаю обновленный массив через websocket каждую секунду).
Все, что мне нужно, это показать все строки всоставная часть.Что ж, самое простое решение - это ngFor и заключить каждую строку в div, но мне не нравится идея нескольких сотен div в компоненте.
Поэтому я решил попробовать использовать только одну текстовую область, как это (кратко):

<mat-form-field>
  <textarea matInput [formControl]='myArrayofStrings'></textarea>
</mat-form-field>

А в компоненте просто обновляйте это значение каждый раз, когда я получаю новый массив:

this.myArrayofStrings.setValue(newArray);

Итак, мой вопрос - насколько это надежно, умно и быстрорешение будет?

Может быть, есть и другие более умные решения для этой, знаете ли, тривиальной задачи.
( кстати мой стек - Angular 7, Angular Material )

Спасибозаранее.

1 Ответ

0 голосов
/ 28 января 2019

Я думаю, что нет хорошего способа постоянно обновлять большой объект данных для однострочных обновлений.В Angular, если объект, на который есть ссылка в шаблоне, будет изменен, он будет полностью повторно визуализирован , и в вашем случае он будет генерировать устаревший рендеринг, поскольку ваши предыдущие журналы данных не изменятся ... такВы должны отделить журнал, полученный от запроса, и данные, которые вы показываете пользователю, чтобы избежать сбоя пользовательского интерфейса на больших данных.

Некоторые идеи:

  1. Создайте таблицу: Создайте источник данных для стандартной таблицы угловых материалов из журнала, который вы получаете из сокета, но используйте данные только при получении источника данных таблицы: я имею в виду каждый раз, когда таблица запрашивает свои данные, вы проверяетесвой постоянно растущий объект, и возвращайся соответственно.Например, вы можете использовать нумерацию страниц или установить кнопку «Обновить» и выполнять повторную визуализацию только по требованию пользователя.(хорошая основа для этого: примеры таблиц / таблица, извлекающая данные по HTTP

  2. Извлечение в меньшие куски: Создание массива "of buckets ", и только нажмите на" buckets ". Например: каждый бак может содержать 100 строк журнала, и вы обновляете только текущий контейнер, пока он заполняется. Таким образом, только последние 1-99 строкперерисовывается, остальные элементы не будут.

  3. Создание пакетов данных Создание объектов, которые являются строками, и обновлять их, только если новые данные превышаютзаданной длины. Например, вы обновляете представление только после прибытия 50 новых строк или через каждые х. секунд - таким образом вы разделяете рендеринг и событие websocket, предоставляя время для визуализации интерфейса пользователя.

...