parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

тесты плохие :)

Misha v.3 14.01.2015 01:16 / 14.01.2015 01:21

@USE
debug/Erusage.p


@main[][v]
$n(10000)
$s[/a/ab/abc/xyzw/herts/?df/11/22?333]
$r[^regex::create[(?:/[^^\?/]?)(?:\?.*)?][gn]]
^memory:compact[]
^Erusage:measure{^m1[$s]}[v]
<hr />
ms: $v.time<br />
KB: $v.memory_kb<br />
BL: $v.memory_block


@m1[s][i;j]
^for[i](1;$n){$result(^s.match[(?:/[^^\?/]?)(?:\?.*)?][gn])}


@m2[s][i;j]
^for[i](1;$n){$result(^s.match[$r])}


@m3[s][i;j;fixuri;uri]
^for[i](1;$n){$fixuri[^s.split[?;lh]]$uri[^fixuri.0.trim[both;/]]$result(^uri.split[/])}


@z[]
m1:
6
ms: 105.011
KB: 9748
BL: 10044

m2:
6
ms: 64.007
KB: 6592
BL: 6784

m3:
5
ms: 135.014
KB: 19680
BL: 20348

да, я чуть пооптимизировал regex (убрал запоминание)
если кому-то надо вызывать этот метод тысячи раз -- можно вынести создание regex-а из метода (m2), будет ещё быстрее.
в общем это не удивительно, т.к. у данных match-ей не происзодит создания объектов. у двух сплитов создаются 2 таблицы каждый раз.

P.S. методы возвращают разные результаты. зависит это от завершающего хэша. что нужно в результате я не знаю, если последний слэш не нужно учитывать, то Maxx подправит regex :)

P.P.S. но вообще этот метод по логике должен вызываться буквально пару раз. т.е. смысла в его ускорении нет ни малейшего. поэтому использовать стоит тот вариант, который проще читается. для кого-то это match, для кого-то -- split.