]> Sergey Matveev's repositories - public-inbox.git/commitdiff
view: update /$INBOX/$MSGID/T/ to be async
authorEric Wong <e@yhbt.net>
Sun, 5 Jul 2020 23:27:46 +0000 (23:27 +0000)
committerEric Wong <e@yhbt.net>
Mon, 6 Jul 2020 20:01:15 +0000 (20:01 +0000)
Another 10% or so speedup in a frequently-hit endpoint.

lib/PublicInbox/View.pm

index 117257a64ff5222fdf0b5e54ca6cd9e2f1c32a08..16a0fcdfbe3406c4f110b6a733b4b5078e56dce1 100644 (file)
@@ -459,23 +459,26 @@ sub thread_html {
        # flat display: lazy load the full message from smsg
        $ctx->{msgs} = $msgs;
        $ctx->{-html_tip} = '<pre>';
-       PublicInbox::WwwStream::response($ctx, 200, \&thread_html_i);
+       PublicInbox::WwwStream::aresponse($ctx, 200, \&thread_html_i);
 }
 
 sub thread_html_i { # PublicInbox::WwwStream::getline callback
-       my ($ctx) = @_;
-       my $msgs = $ctx->{msgs} or return;
-       while (my $smsg = shift @$msgs) {
-               my $eml = $ctx->{-inbox}->smsg_eml($smsg) or next;
+       my ($ctx, $eml) = @_;
+       if ($eml) {
+               my $smsg = $ctx->{smsg};
                if (exists $ctx->{-html_tip}) {
                        $ctx->{-title_html} = ascii_html($smsg->{subject});
-                       return $ctx->html_top .
-                               eml_entry($ctx, $smsg, $eml, scalar @$msgs);
+                       $ctx->zmore($ctx->html_top);
+               }
+               return eml_entry($ctx, $smsg, $eml, scalar @{$ctx->{msgs}});
+       } else {
+               while (my $smsg = shift @{$ctx->{msgs}}) {
+                       return $smsg if exists($smsg->{blob});
                }
-               return eml_entry($ctx, $smsg, $eml, scalar @$msgs);
+               my $skel = delete($ctx->{skel}) or return; # all done
+               $ctx->zmore($$skel);
+               undef;
        }
-       my ($skel) = delete @$ctx{qw(skel msgs)};
-       $$skel;
 }
 
 sub multipart_text_as_html {