Sergey Martynoff wrote:
>> I'm attaching a new test file you can run along
with a file of
>> benchmarks.
>
> It was a good idea to benchmark the sub. At least it is
obvious
> now, that replacement without backreferences should be
handles
> separately, the simplest way. I ran the benchmark on my
windows
> pc, and get similar (even more contrast) results.
>
> Totals:
> Rate
replace_andy
> replace_andy 13224/s --
> replace_andy_with_patch 20224/s 53%
> replace_josh_new2 27434/s 107%
>
>
> I don't think using no strict 'refs' is a big trouble
(at least it
> is used quite often in so many modules), so IMO
josh_new2 may be a
> good candidate.
Yeah, the main downside of josh_new2 is that we store the
matches for
each match iteration. So if we had a file like:
("a" x 5_000_000 . 'q') x 5
and did a replace like:
s/(a+q)/$1bc/g
then we'd store at least 5 million bytes in the hash causing
that much
of an increase in memory. (Probably more/double with
different
character encodings and such.) With the replace_andy(/paul)
versions,
they pull the data from the string already in memory. It's
the classic
memory vs CPU trade-off. If we're worried about
multi-megabyte
matches, then I think it might be best to go with
'replace_andy_with_patch' which shows 'decent' average rates
everywhere without using as much memory.
I do have one other idea I'm going to try out and see if it
will work
or not. I'll post that tomorrow if it pans out.
It's amazing how dog slow replacement gets when implemented
in Perl. :P
-- Josh
_______________________________________________
templates mailing list
templates template-toolkit.org
http://lists.template-toolkit.org/mailman/listinfo/t
emplates
|