Я хотел протестировать различные способы поиска по тексту и их влияние на время.Для этого я написал следующее:
// test case 1: no regex instance & regex.exec
let t1total = 0;
for (let j = 0; j < trialCount; j++){
let start = performance.now();
for (let i = 0; i < splitLog.length; i++) {
/^([A-Z]+)[^\d]+([\d\/\-.:]+\sUTC)/.exec(splitLog[i]);
}
let end = performance.now();
t1total += end - start
}
t1total /= trialCount;
// test case 2: pre-compile + regex.exec
let t2total = 0;
let compileStart = performance.now();
const preRegex = new RegExp(/^([A-Z]+)[^\d]+([\d\/\-.:]+\sUTC)/);
let compileEnd = performance.now();
t2total += compileEnd - compileStart;
for (let j = 0; j < trialCount; j++){
let start = performance.now();
for (let i = 0; i < splitLog.length; i++) {
preRegex.exec(splitLog[i]);
}
let end = performance.now();
t2total += end - start
}
t2total /= trialCount;
Я хотел выполнить это во многих испытаниях и взять среднее значение, чтобы получить более последовательный результат, но понял, что узел автоматически оптимизирует такую ситуацию.
Результаты в мс для 1 испытания:
Test 1: no regex instance + regex.exec 9.151600003242493
Test 2: pre-compile + regex.exec 4.707100033760071
Результаты в мс для 1000 испытаний:
Test 1: no regex instance + regex.exec 2.340533686041832
Test 2: pre-compile + regex.exec 2.199146592259407
Таким образом, узел будет выполнять эту оптимизацию сам при повторном созданиито же самое регулярное выражение.
Теперь представьте себе скрипт, в котором exec вызывается только один раз для регулярного выражения, которое не было создано.Будет ли Rhino многократно вызывать такой скрипт для оптимизации, аналогичной узлу, выполняющему цикл, подобный тестовому примеру 1?
Другими словами, оптимизирует ли Rhino повторный вызов сценария, который создает регулярное выражение, подобно тому, как nodejs оптимизирует многократное создание экземпляровтот же регулярное выражение?