parser

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

 

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

по поводу вынесения кода в отдельный метод...

Misha v.3 07.03.2004 18:45 / 07.03.2004 18:49

...вы свой код будете постоянно в тело страниц писать или его вынесите в отдельный метод? про то и речь: идет сравнение регулярных выражений. и если так, то эти выражения надо ставить в равные условия. при этом где находится метод (в отдельном файле или нет) - значения не имеет.

немного переделал тестовый файл, результаты:
Text size: 24 bytes
Iterations: 10000
1 296.875 ms 22444 KB
2 187.5 ms 11616 KB
3 140.625 ms 7564 KB

на маленьких строках он медленнее, но на больших все меняется (обратите внимание, итераций уже не 10000):
Text size: 16209 bytes
Iterations: 400
1 328.125 ms 32976 KB
2 906.25 ms 32516 KB
3 828.125 ms 16160 KB

если файл ещё больше:
Text size: 21377 bytes
Iterations: 400
1 453.125 ms 46084 KB
2 1218.75 ms 45612 KB
3 1140.63 ms 22656 KB

код:
@trim1[str]
$result[^str.match[^^\s+][]{}]
$result[^result.match[\s+^$][]{}]


@trim2[str]
$result[^str.match[^^\s*(.*?)\s*^$][]{$match.1}]


@do[n;code][v]
^memory:compact[]
^run_time{$code}[v]
<tr>
<td>$n</td>
<td>$v.time ms</td>
<td>$v.memory_kb KB</td>
</tr>


@main[]
$f[^file::load[text;/_test.html]]
$f1[^file::load[text;/auto.p]]

$steps[^table::create{cnt	text
10000	     ghbvth ntrcnf      
400	$f.text
400	$f1.text
}]


^steps.menu{
	Text size: ^steps.text.length[] bytes<br />
	Iterations: $steps.cnt
	<table cellpadding='5' cellspacing='0' border='1'>
	^do[1]{^for[page](1;$steps.cnt){$a[^trim[$steps.text]]}}
	^do[2]{^for[page](1;$steps.cnt){$a[^trim1[$steps.text]]}}
	^do[3]{^for[page](1;$steps.cnt){$a[^trim2[$steps.text]]}}
	</table>
	<br /></br />
}
P.S. @run_time и @trim используются те, что в lib.p
P.P.S. на строках ~200-250 байт время выравнивается
P.P.P.S. против чрезмерного расхода памяти у нас есть memory:compact, против времени выполнения нету ничего.
P....S. ничего не мешает добавить в @trim проверку на длинну строки, и в зависимости от неё выбирать алгоритм.