меня получил проблемы с производительностью JSONPath работать в Javascript (с Stephan Goessner Usefull Library)JSONPath в Javascript так долго - около 3000 раз больше, чем классическая петля
со следующей структурой 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 'элементов' содержит 2 элемента на каждом уровне
- 'экземпляры' LEVEL3 содержит около 100 пунктов в моем конкретных элемент (другие совершенно одинаковы)
- level4 'properties' содержит около 15 наименований
С JSON путем, следующий код дать мне время ответа закрыт на 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 держит Привлекательность из-за его простой и короткий синтаксис (как в kiss principle, я наркоман) ... но есть способ уменьшить задержку расчета ...? около Впечатляющий 4000 раз
Я не знаком с JSONPath, но вы уверены, что не просматриваете весь ваш набор данных? – Tibos
Возможно, да, но jsonpath построен с низким уровнем eval javascript-функции ... немного сложно просмотреть JSonPath построен, чтобы найти несколько результатов. В моем конкретном случае мне нужен только один результат ... может быть, исправление может быть найдено ... Я связался с автором ... поддерживаю связь –