バージョン

パフォーマンスの最適化 (非バインド列、igGrid)

トピックの概要

目的

このトピックでは、クライアントベースとサーバーベースの非バインド列の統合とそれぞれの最適化について説明します。また、統合が行われる場合に開発者がプログラム的に制御する方法を示します。

前提条件

このトピックを理解するために、以下のトピックを参照することをお勧めします。

このトピックの内容

このトピックは、以下のセクションで構成されます。

概要

非バインド列使用時のグリッドのパフォーマンス最適化の概要

MVC シナリオでは、マージ操作が行われる場所を選択できます。オプションは、クライアント上またはサーバー上です。

ビューでは、この構成は Grid<T>.MergeUnboundColumns(bool mergeUnboundColumns) メソッドで制御されます。

コントローラーでは、この構成は GridModel.MergeUnboundColumns ブール値プロパティで制御されます。

MergeUnboundColumns オプションは、Ignite UI for MVC Grid 使用時の MVC シナリオでのみ意味をなします。クライアント上では、開発者が明示的にこのオプションを設定することはできません。

MergeUnboundColumns のデフォルト値は False です。

注: igHieararchicalGrid では、プロパティは各 ColumnLayout に設定しなければなりません。

クライアント上での非バインド列のマージ

クライアント上での非バインド列のマージの概要

これがデフォルト構成です。

MergeUnboundColumns オプションの設定に失敗するか、明示的に False に設定すると、非バインド列はクライアント上でマージされます。これは、JSON 応答の非バインド列ではデータは応答 Metadata の一部として送られ、グリッド データとは別であるという意味です。

以下のコード スニペットは、Ignite UI for MVC Grid により生成される igGrid 初期化コードを示します。データ ソース Metadata プロパティには、DomainName 非バインド列データを含む unboundValues プロパティがあることが分かります。mergeUnboundColumns = false は、igGrid にデータ ソースのメタデータ内に非バインド列データを探すよう指示しています。

JavaScript の場合:

$.ig.loader('igGrid', function() {
    $('#grid1').igGrid({ 
        dataSource: {
            "Records":[
            {"FirstName":"Nancy","LastName":"Davolio"},
            {"FirstName":"Andrew","LastName":"Fuller"},
            {"FirstName":"Janet","LastName":"Leverling"}
            ],
            "TotalRecordsCount":0,
            "Metadata":{
            "timezoneOffset":7200000,
            "unboundValues":
                {
                    "DomainName":[
                        "examplenancyd","exampleandrewf","examplejanetl"
                    ]
                }
            }
        },
        columns: [ 
        { key: 'FirstName', dataType: 'string', headerText: 'First Name' }, 
        { key: 'LastName', dataType: 'string', headerText: 'Last Name' }, 
        { unbound: true, key: 'DomainName', headerText: 'DomainName', dataType: 'string' } 
        ],
        dataSourceType: 'json',
        autoGenerateColumns: false,
        autoGenerateLayouts: false,
        mergeUnboundColumns: false, 
        responseDataKey: 'Records', 
        generateCompactJSONResponse: false, 
        enableUTCDates: true, 
        localSchemaTransform: true 
    });
});

MergeUnboundColumns オプションのデフォルト値は False であり、サーバーから重い負荷を取り除き、より多くのクライアント要求を処理できるようにします。

クライアント上での非バインド列のマージのパフォーマンス

クライアント側でマージする場合、オリジナルのデータ ソースが過剰に大きいとパフォーマンスがヒットすることになります。これは、データ全体がトラバースされ、新しい非バインド値が追加されるためです (またはリスト値が少ない場合はデフォルトの null 値)。

大規模データ ソース シナリオでは、ページングの使用をお勧めします。これにより、マージされるレコードの数が少なくなります。

サーバー上での非バインド列のマージ

サーバー上での非バインド列のマージの概要

MergeUnboundColumns = true を実行すると、サーバー上でマージが起こります。結果として、典型的なレコード セットとしてデータはクライアントに送られます (応答の中で非バインド列用のメタデータはありません)。クライアント上の mergeUnboundColumn プロパティは true に設定され、igGrid はデータにタッチしません。クライアント上の列構成では、unbound プロパティは Grid MVC ラッパーによって false に設定され、そのため igGrid は列をバインドとして参照します。この場合、もう 1 つのプロパティ (インターナルとみなされ API マニュアルには記載されません) が列定義の一部として送られます。名前は unboundDS であり、igGrid で非バインド列を探すために使用可能で未サポート機能を無効にします。

以下のコードは、Ignite UI for MVC Grid から生成された igGrid クライアント側コードを示します。キーDomainName を持つ列はバインドされませんが、データはデータ ソースの一部です。この場合、その unbound プロパティは false に設定され、mergeUnboundColumns は true に設定されます。列プロパティの unboundDS は true (Ignite UI for MVC Grid により) に設定され、列はバインドされないことが示されます。

JavaScript の場合:

$.ig.loader('igGrid', function() {
    $('#grid1').igGrid({ 
        dataSource: {
        "Records":[
            {"FirstName":"Nancy","LastName":"Davolio","DomainName":"examplenancyd"},
            {"FirstName":"Andrew","LastName":"Fuller","DomainName":"exampleandrewf"},
            {"FirstName":"Janet","LastName":"Leverling","DomainName":"examplejanetl"}
            ],
            "TotalRecordsCount":0,
            "Metadata":{"timezoneOffset":7200000}
        },
        dataSourceType: 'json',
        autoGenerateColumns: false,
        autoGenerateLayouts: false,
        mergeUnboundColumns: true, 
        responseDataKey: 'Records', 
        generateCompactJSONResponse: false, 
        enableUTCDates: true, 
        columns: [ 
            { key: 'FirstName', dataType: 'string', headerText: 'First Name' }, 
            { key: 'LastName', dataType: 'string', headerText: 'Last Name' }, 
            { 
                unbound: false, 
                key: 'DomainName', 
                headerText: 'DomainName', 
                dataType: 'string', 
                unboundDS: true 
            } 
        ], 
        localSchemaTransform: true 
    });
});

サーバー上での非バインド列のマージのパフォーマンス

サーバー側でマージする場合、オリジナルのデータ ソースが過剰に大きいとパフォーマンスヒットの原因となる場合があります。これは、データ全体がトラバースされ、新しい非バインド値が追加されるためです (またはリスト値が少ない場合はデフォルトの null 値)。お分かりのように、サーバーは通常、より危険な位置にあるもので、複数のクライアントで複数回実行しなければならないと大規模なデータ操作は非常に深刻な問題になります。

MergeUnboundColumns = true のときに SetUnboundValues メソッドのいずれかを使用して非バインド メソッド値の設定に失敗すると、全体的なデータ ソースをトラバースし、すべての値を非バインド列のデフォルト値 (null 値) に戻します。

List<object>を第 2 パラメータとして承諾するオーバーロードに比べ、ビューには Grid<T>.SetUnboundValues(string key, Dictionary<object, object> values) を、コントローラーには GridModel.SetUnboundValues(string key, Dictionary<object, object> values) をパフォーマンス ゲインとして使用することを強くお勧めします。

大規模データ ソース シナリオではページングの使用をお勧めします。マージはページングの後で実行され、そのためマージするレコード数が少なくなるためです。

注: 異なるデータ ソースからデータのマージを処理する最善の方法は、データ ソースからデータを結合するモデルを作成し、グリッドのモデルとして使用することです。これにより、すべてのリポート機能がサポートされます。

関連コンテンツ

トピック

以下のトピックでは、このトピックに関連する追加情報を提供しています。

  • 既知の問題と制限: このトピックは、igGrid 非バインド列機能の既知問題と制限事項について説明します。

オンラインで表示: GitHub