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倍はかなり印象的です