From: Eric Wong Date: Thu, 4 Aug 2022 08:17:02 +0000 (+0000) Subject: feed: avoid unnecessary map loop in non-over path X-Git-Tag: v1.9.0~48 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=b896b1043b81274b8b1737320c49f3fb7ce9f842;p=public-inbox.git feed: avoid unnecessary map loop in non-over path We can bless objects while doing the initial insertion to avoid extra the extra map iteration and temporary array(s). Fewer ops means memory savings for the likely case of ->over users, too. --- diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm index b2219dad..ee579f6d 100644 --- a/lib/PublicInbox/Feed.pm +++ b/lib/PublicInbox/Feed.pm @@ -1,10 +1,10 @@ -# Copyright (C) 2013-2021 all contributors +# Copyright (C) all contributors # License: AGPL-3.0+ # # Used for generating Atom feeds for web-accessible mailing list archives. package PublicInbox::Feed; use strict; -use warnings; +use v5.10.1; use PublicInbox::View; use PublicInbox::WwwAtomStream; use PublicInbox::Smsg; # this loads w/o Search::Xapian @@ -108,13 +108,13 @@ sub recent_msgs { my $last; my $last_commit; local $/ = "\n"; - my @oids; + my @ret; while (defined(my $line = <$log>)) { if ($line =~ /$addmsg/o) { my $add = $1; next if $deleted{$add}; # optimization-only - push @oids, $add; - if (scalar(@oids) >= $max) { + push(@ret, bless { blob => $add }, 'PublicInbox::Smsg'); + if (scalar(@ret) >= $max) { $last = 1; last; } @@ -136,8 +136,7 @@ sub recent_msgs { $last_commit and $ctx->{next_page} = qq[] . 'next (older)'; - - [ map { bless {blob => $_ }, 'PublicInbox::Smsg' } @oids ]; + \@ret; } 1;