我有一个blazor组件,可以从服务中获取数据,然后将数据呈现到表中。
这是我的情况:
@myObject.MyProperty
属性@page "/fetchdata"
@inject WeatherForecastService ForecastService
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Temp. (C)</th>
<th>Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Date.ToShortDateString()</td>
<td>@forecast.TemperatureC</td>
<td>@forecast.TemperatureF</td>
<td>@forecast.Summary</td>
</tr>
}
</tbody>
</table>
}
@code {
private List<WeatherForecast> forecasts;
protected override async Task OnInitializedAsync()
{
forecasts = ForecastService.List;
ForecastService.MyEvent += _Event;
}
private void _Event(object sender, EventArgs e)
{
InvokeAsync(StateHasChanged);
}
}
因此,在这种情况下,WeatherForecast
是一个大对象,但是仅显示其属性的一小部分。
Blazor是否已经优化了此方案,或者服务器是否总是向客户端“提供”整个对象?
答案 0 :(得分:2)
仅发送更改是有效的“优化”。
来自Blazor文档(来自Blazor服务器部分):
Blazor中的UI更新是由以下触发的:
用户交互,例如选择一个按钮。应用触发器,例如 计时器。重新渲染图形,UI差异(差异)为 计算。该差异是需要进行DOM编辑的最小集合 在客户端上更新用户界面。差异通过以下方式发送给客户端 二进制格式并由浏览器应用。