{
my @values;
my $prev_first;
my $prev_last;
sub cache {
my ($data, $first, $last) = @_;
unless ($prev_first and $prev_last) {
@values = grep defined, @{$data}{$first .. $last};
} else {
for ($prev_first .. $first-1) {
shift @values if defined $data->{$_};
}
for ($prev_last+1 .. $last) {
push @values, $data->{$_} if defined $data->{$_};
}
}
$prev_first = $first;
$prev_last = $last;
sum(@values) / @values;
}
}
####
Rate orig zaxo buk aris cache
orig 6.26/s -- -22% -42% -80% -98%
zaxo 8.00/s 28% -- -26% -75% -98%
buk 10.9/s 74% 36% -- -66% -97%
aris 31.8/s 408% 297% 192% -- -91%
cache 368/s 5775% 4496% 3283% 1057% --
##
##
{
my %cache;
sub cache {
my $str = shift;
my ($wday, $mon, $mday, $time, $year) = split /\s+/, $str;
my ($hour, $min, $sec) = split ':', $time;
my $timebase;
if ($cache{"$year$mon$mday"}) {
$timebase = $cache{"$year$mon$mday"};
} else {
$timebase = timelocal(0, 0, 0, $mday, $mtrans{$mon}, $year-1900);
$cache{"$year$mon$mday"} = $timebase;
}
return $timebase + $sec + $min*60 + $hour*60*60;
}
}
##
##
s/iter D::P buggy fixed nonre cache
D::P 9.08 -- -76% -77% -77% -92%
buggy 2.16 320% -- -2% -3% -66%
fixed 2.12 328% 2% -- -2% -65%
nonre 2.09 335% 4% 2% -- -65%
cache 0.735 1136% 194% 188% 184% --