目前,我在Blazor服务器页面上使用了无限循环(有延迟)来更新UI。
<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());
}
}
}
}
因此,只需一次会话,就可以确保对我的本地环境运行良好。但是在野外负载情况下如何执行呢?
无论在服务器还是浏览器上,StateHasChanged都将重新呈现当前组件/页面及其所有子代(例如)。
将结果渲染到内存中的虚拟DOM,然后与之前渲染的虚拟DOM进行比较。如果有任何更改,它将为客户端生成HTML增量。
因此,答案是,它可能很少向浏览器发送html,但是服务器将为每个用户每秒渲染60次内存中的页面。
这根本无法很好地扩展。使用Reactive库将数据从源推送到UI会更好。这样,它将仅在需要时呈现,并且您的UI将立即更新。
参见https://blazor-university.com/overview/blazor-hosting-models/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句