about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-01-08 11:19:57 +0000
committerEric Wong <e@80x24.org>2019-01-08 19:28:20 +0000
commit59fd8cf084c6a67d9801c888a183eb83b552692d (patch)
tree35f98b47583dc371526def07ddeaaa6b030d1ff8
parent7766a71df4cb715a240fd97a03dc0c31ab153c21 (diff)
downloadpublic-inbox-59fd8cf084c6a67d9801c888a183eb83b552692d.tar.gz
{mapping} overhead is now down to ~1.3M at the end of
a giant thread from hell.
-rw-r--r--lib/PublicInbox/Inbox.pm5
-rw-r--r--lib/PublicInbox/SearchThread.pm5
-rw-r--r--lib/PublicInbox/View.pm10
3 files changed, 16 insertions, 4 deletions
diff --git a/lib/PublicInbox/Inbox.pm b/lib/PublicInbox/Inbox.pm
index 73f5761a..d57e46d2 100644
--- a/lib/PublicInbox/Inbox.pm
+++ b/lib/PublicInbox/Inbox.pm
@@ -302,8 +302,9 @@ sub smsg_by_mid ($$) {
         my ($self, $mid) = @_;
         my $srch = search($self) or return;
         # favor the Message-ID we used for the NNTP article number:
-        my $num = mid2num($self, $mid);
-        defined $num ? $srch->lookup_article($num) : undef;
+        defined(my $num = mid2num($self, $mid)) or return;
+        my $smsg = $srch->lookup_article($num) or return;
+        PublicInbox::SearchMsg::psgi_cull($smsg);
 }
 
 sub msg_by_mid ($$;$) {
diff --git a/lib/PublicInbox/SearchThread.pm b/lib/PublicInbox/SearchThread.pm
index be290980..931bd579 100644
--- a/lib/PublicInbox/SearchThread.pm
+++ b/lib/PublicInbox/SearchThread.pm
@@ -53,6 +53,11 @@ sub _add_message ($$) {
         my $this = _get_cont_for_id($id_table, $smsg->{mid});
         $this->{smsg} = $smsg;
 
+        # saves around 4K across 1K messages
+        # TODO: move this to a more appropriate place, breaks tests
+        # if we do it during psgi_cull
+        delete $smsg->{num};
+
         # B. For each element in the message's References field:
         defined(my $refs = $smsg->{references}) or return;
 
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 5ddb8425..cd125e00 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -219,7 +219,10 @@ sub index_entry {
         $rv .= _th_index_lite($mid_raw, \$irt, $id, $ctx);
         my @tocc;
         my $ds = $smsg->ds; # for v1 non-Xapian/SQLite users
-        my $mime = delete $smsg->{mime}; # critical to memory use
+        # deleting {mime} is critical to memory use,
+        # the rest of the fields saves about 400K as we iterate across 1K msgs
+        my ($mime) = delete @$smsg{qw(mime ds ts blob subject)};
+
         my $hdr = $mime->header_obj;
         my $from = _hdr_names_html($hdr, 'From');
         obfuscate_addrs($obfs_ibx, $from) if $obfs_ibx;
@@ -311,7 +314,10 @@ sub _th_index_lite {
         my $nr_s = 0;
         my $siblings;
         if (my $smsg = $node->{smsg}) {
-                ($$irt) = (($smsg->{references} || '') =~ m/<([^>]+)>\z/);
+                # delete saves about 200KB on a 1K message thread
+                if (my $refs = delete $smsg->{references}) {
+                        ($$irt) = ($refs =~ m/<([^>]+)>\z/);
+                }
         }
         my $irt_map = $mapping->{$$irt} if defined $$irt;
         if (defined $irt_map) {