Time to split strings is comparable to directly loading structured values.
Considered hashes for scalability with more (optional) columns, but not
worth the cost at this time.
Benchmark loading 1264 rows in perl:
rate memory size
strings 468/s 52kB 15kB
split 257/s 152kB "
arrays 221/s 133kB 17kB
hashes 126/s 188kB 27kB
say 'use utf8;';
use Data::Dump 'pp';
say 'use utf8;';
use Data::Dump 'pp';
if (my $lang = shift @ARGV) {
my %filter = (lang => $lang);
if (my $lang = shift @ARGV) {
my %filter = (lang => $lang);
- say pp({ $db->select('_word_ref w' => "ref, exportform(row(w.*))", \%filter)->map })
+ my $cols = "ref, id, prio, array_to_string(form || alt, '/')";
+ %rows = $db->select(_word_ref => $cols, \%filter)->map_arrays;
+ say pp \%rows
=~ s/\\x\{([0-9A-F]+)\}/chr hex $1/ger;
exit;
}
=~ s/\\x\{([0-9A-F]+)\}/chr hex $1/ger;
exit;
}
-say pp { $db->select(_cat_words => "coalesce(id::text, ''), forms")->map };
+else {
+ %rows = $db->select(_cat_words => "coalesce(id::text, ''), forms")->map;
+ $_ = [ map { [split /:/, $_, 3] } @{$_} ] for values %rows;
+ say pp \%rows;
+}
sub printimgs {
say '<ul>';
for my $row (@_) {
sub printimgs {
say '<ul>';
for my $row (@_) {
- my ($id, $level, $title) = split /:/, $row, 3;
+ my ($id, $level, $title) = @{$row};
$id or die "empty reference"; # assertion to prevent loops
my @type;
push @type, 'parent' if defined $table->{$id};
$id or die "empty reference"; # assertion to prevent loops
my @type;
push @type, 'parent' if defined $table->{$id};
if ($Request) {
my @query = $Request;
while (@query) {
if ($Request) {
my @query = $Request;
while (@query) {
- push @rows, grep { (split /:/)[1] <= $limit } @query;
- s/:.*// for @query;
+ push @rows, grep { $_->[1] <= $limit } @query;
+ $_ = $_->[0] for @query;
@query = map {$_ ? @{$_} : ()} @{$table}{@query};
}
}
@query = map {$_ ? @{$_} : ()} @{$table}{@query};
}
}
this.form = document.getElementById('quiz');
this.words = Object.values(json)
.sort(() => {return .5 - Math.random()}) // shuffle
this.form = document.getElementById('quiz');
this.words = Object.values(json)
.sort(() => {return .5 - Math.random()}) // shuffle
- .map(row => row.split(/:/))