Производительность X-Path Query - PullRequest
0 голосов
/ 15 марта 2019

Какой из следующих запросов считается более производительным:

//*/*/*/*/*

или

//ancestor-or-self::*/ancestor-or-self::*/ancestor-or-self::*/ancestor-or-self::*/ancestor-or-self::*

или

/descendant-or-self::*/*/*/*

Насколько я понимаю, второе будет сложнее вычислить?

Спасибо.

1 Ответ

1 голос
/ 16 марта 2019

О времени выполнения: оно не имеет заметной разницы из-за того, что существует множество влияющих факторов, но в любом случае с почти одинаковым крошечным временем выполнения каждого запроса.На текущей странице каждый запрос выполнялся в среднем за 0,07–0,09 мкс;1 мкс = 1 секунда * 10 ^ -6.

let arrExecutionTime = [];
function getAverageExecutionTime(locator) {
    let maxIteration = 1000;
    let timeTotal = 0;

    for (let i = 0; i < maxIteration; i++) {
        let executionTimeStart = performance.now();
        let arrNode = document.evaluate(locator, document, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
        arrExecutionTime.push(performance.now() - executionTimeStart);
    }

    for (let k = 0; k < arrExecutionTime.length; k++) {
        timeTotal += arrExecutionTime[k];
    }

    let avgExecutionTime = timeTotal / arrExecutionTime.length;
    console.log(`avgExecutionTime: ${avgExecutionTime}µs \nafter ${maxIteration} iterations \nfor locator:\"${locator}\"`);
}

getAverageExecutionTime("//*/*/*/*/*");
getAverageExecutionTime("//ancestor-or-self::*/ancestor-or-self::*/ancestor-or-self::*/ancestor-or-self::*/ancestor-or-self::*");
getAverageExecutionTime("/descendant-or-self::*/*/*/*");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...