3

Javascript で実行される JSONPath でパフォーマンスの問題が発生しました( Stephan Goessner Usefull Libraryを使用)

次の JSON 構造を使用します。

[
    {
    id:1, 
    name: "lorem", 
    elements: 
    [
        {
            id:101,
            date: Fri Jan 31 2014 18:03:41 GMT+0100 (Paris, Madrid),  // Javascript Date Object,
            instances: [ 
                {
                    id: 1001, 
                    properties: [
                        {
                            code: 'ipsum lens', 
                            id: 1001, 
                            values: [
                                "value1", 
                                "value2",
                                ...
                                // less than 5 values
                            ]
                        }, 
                        ... , / between 20 to 40 items
                    ]
                },
                ... // About 100 items
            ]
        },
        ... // Less than 5 items
    ], 
    meta: [
        {
            id: 10000, 
            code: 'codeabc', 
            property1: true, 
            property2: false,
            property3: 2939, 
        }, 
        ... // between 20 to 40 items
    ]
    }, 
    ... // 4 items
]

数量は次のとおりです。

  • level1には4つのアイテムが含まれています
  • level2 'elements' には各レベルに 2 つのアイテムが含まれます
  • レベル3の「インスタンス」には、特定の要素に約100個のアイテムが含まれています(他はまったく同じです)
  • レベル 4 の「プロパティ」には、約 15 の項目が含まれています

JSON path を使用すると、次のコードにより、クロムで4 秒に近い応答時間が得られます

var startDate = new Date();
var searchedValue = jsonPath(
    myJSONStore, 
    "$.[?(@.name == 'myelementname')].elements[?(@.id == 100)].date"
)[0];
console.log(date)
console.log("Get in " + ((new Date().getTime() - startDate.getTime()) / 1000) + "s")

データ量が少ないことを考えると、この遅延は非常に長いことがわかりました。 jsonPath なしで、この古典的なコードも試しました

var startDate = new Date();
var searchedValue = null;
for(i in myJSONStore) { 
    if (myJSONStore[i].name == 'myelementname') { 
        for (j in myJSONStore[i].elements) {
            if (myJSONStore[i].elements[j].id == 100) {
                var date = myJSONStore[i].elements[j].date;
                break;
            }
        }
    }
}
console.log(date)
console.log("Get in " + ((new Date().getTime() - startDate.getTime()) / 1000) + "s")

今回は、わずか 1 ミリ秒かかりました。

JsonPath は構文がシンプルで短いため魅力を保っています (キスの原理のように、私はハマっています)...しかし、計算の遅延を減らす方法はありますか...? 約4000倍はかなり印象的です

4

1 に答える 1

-1

1) aspx.cs ページで以下のコードを使用します。

string path= "JSON ファイルのパス"; Hiddenfield.Value = File.ReadAllText(パス);

2)その後、aspxページで以下のコードを使用してみてください。つまり、隠しフィールドからjsonオブジェクトを取得してください。

var xyz =$.parseJSON(document.getElementById('<%=Hiddenfield.ClientID%>').value);

于 2014-02-03T14:05:39.870 に答える