производительность обновления пользовательского интерфейса Blazor с большими наборами данных - PullRequest
0 голосов
/ 09 мая 2020

Я рассматриваю перенос одностраничного приложения jQuery + на Blazor в качестве обучающего упражнения, но прежде, чем я это сделаю, я хотел задать вопрос о конкретной функции существующего приложения и о том, что может быть у его аналога Blazor. быть.

TL; DR Я думаю, что мой вопрос: «Есть ли в серверной модели Blazor наблюдаемые массивы?» но я не уверен, что это будет достаточно ясно. Вот длинная версия.

Представьте себе океанское грузовое судно с сотнями и сотнями автомобильных go контейнеров на нем. Каждый вагон go контейнер имеет манифест, в котором перечислено его содержимое, а манифест существует в базе данных не как отдельная запись документа, а как множество отдельных строк данных:

    ```
      select itemname, description, quantity, ...
      from manifests 
      where containerid = 1234
    ```

Грузовое судно имеет главный список вагонов go контейнеров и порт (город) назначения каждого.

Пользователь спрашивает приложение: «Покажите мне содержимое всех контейнеров, предназначенных для Нового Орлеана».

приложение извлекает с удаленного сервера базы данных список контейнеров корабля, которые связаны с Новым Орлеаном, а затем, внутри плотного l oop, извлекает строки манифеста для каждого контейнера и строит манифест, который отображается в пользовательском интерфейсе. Псевдокод:

          foreach container in NewOrleansContainersList
                fetch manifest rows
                build manifest document
                append manifest document to observed array
          next

Когда документ манифеста добавляется к массиву наблюдаемых нокаутов, пользовательский интерфейс имеет манифест DIV, добавленный к document.

Преимущество этого подхода l oop состоит в том, что первый манифест становится доступным и сразу появляется в пользовательском интерфейсе, и пользователь может начать его чтение, пока манифесты для оставшихся контейнеров извлекаются, по одному время из удаленной базы данных. Ожидание, пока весь набор результатов не вернется из удаленной базы данных в результате одного запроса, даст пользователю курсор ожидания в течение довольно длительного времени.

Может ли Blazor сделать что-то подобное в на стороне сервера код? Можно ли (частично) обновлять пользовательский интерфейс каждый раз, когда новый элемент добавляется к (наблюдаемому) массиву в «скрытом коде»?

...