Серверная часть Blazor - обновление в реальном времени с помощью StateHasChanged Loop - PullRequest
0 голосов
/ 29 марта 2020

В настоящее время я использую бесконечное число l oop (с задержкой) на странице своего сервера Blazor для обновления своего пользовательского интерфейса.

<div>
    @for (int i = 0; i < GlobalData.Length; i++)
    {
        @GlobalData[i]
    }
<div>

@code {

    public CancellationTokenSource CancellationTokenSource { get; set; }

    protected override void OnInitialized()
    {
        CancellationTokenSource = new CancellationTokenSource();
        RealTimeUpdate(CancellationTokenSource.Token);
    }

    public async Task RealTimeUpdate(CancellationToken cancellationToken)
    {
        while(!cancellationToken.IsCancellationRequested)
        {
            await Task.Delay(TimeSpan.FromMilliseconds(1000 / 60), cancellationToken);
            if(!cancellationToken.IsCancellationRequested)
            {
                InvokeAsync(() => this.StateHasChanged());
            }
        }
    }
}

Так что это работает нормально для моей локальной среды с одним сессия. Но как это будет работать под нагрузкой в ​​дикой природе?

1 Ответ

1 голос
/ 30 марта 2020

StateHasChanged, на сервере или в браузере, переопределяет текущий компонент / страницу и все ее дочерние элементы (et c).

Результат отображается в виртуальной DOM в памяти, а затем сравнивается в виртуальный DOM предыдущего рендера. Если что-то изменилось, для клиента будет отображаться дельта html.

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

Это не будет хорошо масштабироваться вообще. Было бы гораздо лучше использовать библиотеку Reactive для передачи данных из вашего источника в пользовательский интерфейс. Таким образом, он будет отображаться только при необходимости, и ваш пользовательский интерфейс будет обновляться немедленно.

См. https://blazor-university.com/overview/blazor-hosting-models/

И https://blazor-university.com/components/render-trees/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...