---
# System prepended metadata

title: Blazor パフォーマンスに関するベスト プラクティス 2024-01-27
tags: [パフォーマンス, Blazor]

---

---
lang: ja-jp
breaks: true
---
# Blazor パフォーマンスに関するベスト プラクティス 2024-01-27

> ASP.NET Core Blazor パフォーマンスに関するベスト プラクティス
> https://learn.microsoft.com/ja-jp/aspnet/core/blazor/performance?view=aspnetcore-8.0

## 特定のサブツリーへの再帰的なレンダリングを防ぐ

* 子コンポーネントのパラメーターが確実に、string、int、bool、DateTime などのプリミティブ不変型となるようにします。 変更を検出するための組み込みロジックでは、プリミティブ不変パラメーター値が変更されていなかった場合、再レンダリングが自動的にスキップされます。
* ComponentBase.ShouldRender メソッド をオーバライドする。
    * 複合カスタム モデル型、イベント コールバック、RenderFragment 値などの非プリミティブ パラメーター値を受け入れるため。
    * パラメーター値の変更に関係なく、初期レンダリング後に変更されない UI 専用のコンポーネントを作成する場合。
* 

## イベントをすぐにトリガーしない

* すぐに発生するネイティブ イベントを使用するのではなく JS 相互運用機能を使って、発生頻度の低いコールバックを登録することを検討する。
* 

## JavaScript 相互運用の速度を最適化する

* .NET と JavaScript の間の呼び出しには、追加のオーバーヘッドが必要
    * 既定では、呼び出しは非同期で行われる。
    * 既定では、パラメーターと戻り値は JSON でシリアル化され、.NET および JavaScript 型の間で変換が行われる。
    * 
* さらにサーバー側の Blazor アプリの場合、これらの呼び出しはネットワーク経由でおこなわれる。
* 

## 同期呼び出しの使用を検討する

* サーバーでは、すべての JS 相互運用呼び出しはネットワーク接続を介して送信されるため、非同期である必要がある。
* コンポーネントが WebAssembly でのみ実行されることが確実にわかっている場合は、同期 JS 相互運用呼び出しを行うように検討する。
* 同期呼び出しを使用することで、結果を待機する間の中間状態が存在しなくなる。
* 

###### tags: `Blazor` `パフォーマンス`
