如何减少通过Blazor服务器传输的数据量

时间:2020-05-15 09:05:49

标签: data-binding blazor blazor-server-side

我有一个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是否已经优化了此方案,或者服务器是否总是向客户端“提供”整个对象?

1 个答案:

答案 0 :(得分:2)

仅发送更改是有效的“优化”。

https://docs.microsoft.com/en-us/aspnet/core/blazor/hosting-models?view=aspnetcore-3.1#comparison-to-server-rendered-ui

来自Blazor文档(来自Blazor服务器部分):

Blazor中的UI更新是由以下触发的:

用户交互,例如选择一个按钮。应用触发器,例如 计时器。重新渲染图形,UI差异(差异)为 计算。该差异是需要进行DOM编辑的最小集合 在客户端上更新用户界面。差异通过以下方式发送给客户端 二进制格式并由浏览器应用。