hab einen neuen Serializer entwickelt, derzeit in Testphase für Sessiondateien. Wer Lust, Zeit und Interesse hat, möge mal den damit realisierten Login/Logout testen
Habe Deinen Code gerade 1:1 kopiert und getestet, allerdings mit einem deutlich größeren Hash:
my $ds = {};
for (my $i = 0; $i < 10000; $i++) {
$ds->{'name' . rand(1)} = 'xyz' . rand(1);
$ds->{'foo' . rand(1)} = 'bar' . rand(1);
}
my $fr = FreezeHash->new( file => 'freeze.bin' ) or die $@;
$fr->freeze( $ds );
$fr->write or die $@;
Ergebnis auf meinem Testsystem: ca. 600ms Laufzeit, freeze.bin ist ca. 3000KB groß.
Gegenvergleich mit derselben Datenstruktur, aber mittles JSON umgesetzt:
use JSON ();
my $ds = {};
for (my $i = 0; $i < 10000; $i++) {
$ds->{'name' . rand(1)} = 'xyz' . rand(1);
$ds->{'foo' . rand(1)} = 'bar' . rand(1);
}
open (OUTFILE, '>:utf8', 'freeze.json');
print OUTFILE JSON->new()->encode($ds), "\n";
close OUTFILE;
Ergebnis auf meinem Testsystem: ca. 70ms Laufzeit, freeze.json ist ca. 900KB groß.
Fazit: Dein Serializer braucht beinahe 10x so lange wie JSON und erzeugt dabei ca. 3x so große Dateien. Wenn Du schon was proprietäres baust, sollte es sich zumindest auf irgendeine Weise lohnen?!