【发布时间】:2021-08-22 16:58:18
【问题描述】:
我有一个 Blazor WebAssembly 站点,并且组件树增长了很多。
在我的 Home 组件中,子组件“Foo”的更改可能会导致参数属性“IsChecked”发生更改;这些属性之一被传递到不同的子组件“Bar”。因此,在我的 Home 组件中,Foo 的 EventCallback IsCheckedChanged 调用 StateHasChanged(),以便 Home 组件及其所有子组件重新调用render。
这可能会很慢......对我来说,即使只有一个布尔属性发生变化,渲染和绘制也需要 1-2 秒。假设用户选中和取消选中多个复选框以触发此重新渲染:这种延迟对每个复选框来说都是非常不受欢迎的。 (我已经排除了我在 Home 中的任何其他代码可能会减慢速度。)所以我认为我必须弄清楚哪些组件的哪些部分最慢,并且在某些情况下可能有 ShouldRender reutrn false,或者否则在其中做一些优化。我的问题是我看不到哪些组件对渲染时间的贡献最大。
那么有什么方法可以查看或写出 Blazor 组件渲染所需的时间,正如 lifecycle document 中描述的“渲染”?当然,我假设任何这样的渲染时间都将包括所有孩子的渲染时间。
有没有更好的方法来分析 Blazor WebAssembly 呈现时间?
【问题讨论】:
-
我不知道有任何分析服务。但是,如果您还没有看到,下面的文章有一些关于优化 UI 渲染的有趣信息...docs.microsoft.com/en-us/aspnet/core/blazor/…
-
由于没有真正的代码可看,我建议您可能过度使用
StateHasChanged并导致大量不必要的渲染。考虑在组件需要重新渲染时使用状态服务和事件来驱动。一些示例代码会有所帮助。
标签: asp.net-core blazor profiling blazor-webassembly asp.net-core-5.0