]> Sergey Matveev's repositories - public-inbox.git/commitdiff
nntp: small speed up for multi-line responses
authorEric Wong <e@80x24.org>
Fri, 4 Dec 2020 22:03:46 +0000 (22:03 +0000)
committerEric Wong <e@80x24.org>
Sat, 5 Dec 2020 21:41:52 +0000 (21:41 +0000)
Using a non-zero-length separator for `join' requires extra work
inside Perl.  We can shove the cost of appending "\r\n" into the
`map' loop, instead.  This speeds up the `join' operation.

The "deferred" log entry for a "LISTGROUP org.kernel.vger.linux-kernel"
command (with nearly 3.8 million messages) goes from ~3.96s to 3.86s
on my workstation.

lib/PublicInbox/NNTP.pm

index 6728f9c528665bd0fe28b99cfa0fc9a829b3518e..05d2d13bbbea83880b036565b2a356802ff2322e 100644 (file)
@@ -204,7 +204,7 @@ sub listgroup_range_i {
        my ($self, $beg, $end) = @_;
        my $r = $self->{ng}->mm->msg_range($beg, $end, 'num');
        scalar(@$r) or return;
-       more($self, join("\r\n", map { $_->[0] } @$r));
+       $self->msg_more(join('', map { "$_->[0]\r\n" } @$r));
        1;
 }
 
@@ -327,10 +327,9 @@ sub newnews_i {
                if (my $over = $ibx->over) {
                        my $msgs = $over->query_ts($ts, $$prev);
                        if (scalar @$msgs) {
-                               more($self, '<' .
-                                       join(">\r\n<",
-                                               map { $_->{mid} } @$msgs ) .
-                                       '>');
+                               $self->msg_more(join('', map {
+                                                       "<$_->{mid}>\r\n";
+                                               } @$msgs));
                                $$prev = $msgs->[-1]->{num};
                                return 1; # continue on current group
                        }
@@ -707,7 +706,7 @@ sub hdr_msgid_range_i {
        my ($self, $beg, $end) = @_;
        my $r = $self->{ng}->mm->msg_range($beg, $end);
        @$r or return;
-       more($self, join("\r\n", map { "$_->[0] <$_->[1]>" } @$r));
+       $self->msg_more(join('', map { "$_->[0] <$_->[1]>\r\n" } @$r));
        1;
 }
 
@@ -774,8 +773,8 @@ sub xref_range_i {
        my $msgs = $ng->over->query_xover($$beg, $end);
        scalar(@$msgs) or return;
        $$beg = $msgs->[-1]->{num} + 1;
-       more($self, join("\r\n", map {
-               "$_->{num} ".xref($self, $ng, $_);
+       $self->msg_more(join('', map {
+               "$_->{num} ".xref($self, $ng, $_) . "\r\n";
        } @$msgs));
        1;
 }
@@ -934,7 +933,7 @@ sub over_line ($$$) {
                $smsg->{lines},
                "Xref: " . xref($self, $ng, $smsg));
        utf8::encode($s);
-       $s
+       $s .= "\r\n";
 }
 
 sub cmd_over ($;$) {
@@ -953,7 +952,7 @@ sub cmd_over ($;$) {
                        $smsg->{-orig_num} = $smsg->{num};
                        $smsg->{num} = 0;
                }
-               more($self, over_line($self, $ng, $smsg));
+               $self->msg_more(over_line($self, $ng, $smsg));
                '.';
        } else {
                cmd_xover($self, $range);
@@ -967,7 +966,7 @@ sub xover_i {
        my $nr = scalar @$msgs or return;
 
        # OVERVIEW.FMT
-       more($self, join("\r\n", map {
+       $self->msg_more(join('', map {
                over_line($self, $ng, $_);
                } @$msgs));
        $$beg = $msgs->[-1]->{num} + 1;