about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-01-08 11:13:31 +0000
committerEric Wong <e@80x24.org>2019-01-08 19:27:56 +0000
commitd7ceeaadbab7034eccb88b0c53b9538c1c92b25a (patch)
tree750bbdec69e3664bd4c2f75cbec18643da929637
parent2eaff604b1f16f0fcd8ef358e4c44152bb0ded8a (diff)
downloadpublic-inbox-d7ceeaadbab7034eccb88b0c53b9538c1c92b25a.tar.gz
These fields are only necessary in NNTP and not even stored in
Xapian; so keeping them around for the PSGI web UI search
results wastes nearly 80K when loading large result sets.
-rw-r--r--lib/PublicInbox/SearchMsg.pm13
-rw-r--r--t/search.t10
2 files changed, 18 insertions, 5 deletions
diff --git a/lib/PublicInbox/SearchMsg.pm b/lib/PublicInbox/SearchMsg.pm
index 65e085f4..292efcee 100644
--- a/lib/PublicInbox/SearchMsg.pm
+++ b/lib/PublicInbox/SearchMsg.pm
@@ -57,11 +57,14 @@ sub load_from_data ($$) {
 
                 # To: and Cc: are stored to optimize HDR/XHDR in NNTP since
                 # some NNTP clients will use that for message displays.
+                # NNTP only, and only stored in Over(view), not Xapian
                 $self->{to},
                 $self->{cc},
 
                 $self->{blob},
                 $self->{mid},
+
+                # NNTP only
                 $self->{bytes},
                 $self->{lines}
         ) = split(/\n/, $_[1]);
@@ -79,10 +82,18 @@ sub load_expand {
         $self;
 }
 
+# Only called by PSGI interface, not NNTP
 sub load_doc {
         my ($class, $doc) = @_;
         my $self = bless {}, $class;
-        load_expand($self, $doc);
+        my $smsg = load_expand($self, $doc);
+
+        from_name($smsg); # fill in {from_name} so we can delete {from}
+
+        # drop NNTP-only fields which aren't relevant to PSGI results:
+        # saves ~80K on a 200 item search result:
+        delete @$smsg{qw(from ts to cc bytes lines)};
+        $smsg;
 }
 
 # :bytes and :lines metadata in RFC 3977
diff --git a/t/search.t b/t/search.t
index 3c758e68..6415a644 100644
--- a/t/search.t
+++ b/t/search.t
@@ -341,7 +341,7 @@ $ibx->with_umask(sub {
                 is(scalar(@$res), 1,
                         "searched $pfx successfully for From:");
                 foreach my $smsg (@$res) {
-                        like($smsg->from, qr/Laggy Sender/,
+                        like($smsg->from_name, qr/Laggy Sender/,
                                 "From appears with $pfx");
                 }
         }
@@ -358,16 +358,18 @@ $ibx->with_umask(sub {
 
         $res = $ro->query('q:theatre');
         is(scalar(@$res), 1, 'only one quoted body');
-        like($res->[0]->from, qr/\AQuoter/, 'got quoted body') if scalar(@$res);
+        like($res->[0]->from_name, qr/\AQuoter/,
+                'got quoted body') if (scalar(@$res));
 
         $res = $ro->query('nq:theatre');
         is(scalar @$res, 1, 'only one non-quoted body');
-        like($res->[0]->from, qr/\ANon-Quoter/, 'got non-quoted body') if scalar(@$res);
+        like($res->[0]->from_name, qr/\ANon-Quoter/,
+                'got non-quoted body') if (scalar(@$res));
 
         foreach my $pfx (qw(b: bs:)) {
                 $res = $ro->query($pfx . 'theatre');
                 is(scalar @$res, 2, "searched both bodies for $pfx");
-                like($res->[0]->from, qr/\ANon-Quoter/,
+                like($res->[0]->from_name, qr/\ANon-Quoter/,
                         "non-quoter first for $pfx") if scalar(@$res);
         }
 }