Bug 29032: Pre-load ILL backends to speed up response

Bug 22440 will rewrite the route and make it even more efficient by
prefetching the related data instead of performing several queries in
loops.

In the meantime, we can make this controller perform better with a
simple intervention: load backends once, and use the
$request->_backend() setter to pre-set it before using the objects.

To test:
1. Perform any usual ILL requests listing, try having several
=> FAIL: Notice it takes a weird amount of time to load
2. Apply this patch
3. Restart all
4. Repeat 1
=> SUCCESS: It feels fast enough!
5. Sign off :-D

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
(cherry picked from commit 7b1dc9d5f9)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
(cherry picked from commit fa84d0704f)
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
This commit is contained in:
Tomas Cohen Arazi 2021-09-15 12:12:33 -03:00 committed by Victor Grousset/tuxayo
parent 848ac85dcc
commit be277cd4c6
1 changed files with 11 additions and 3 deletions

View File

@ -62,6 +62,15 @@ sub list {
: ()
})->as_list;
my $fetch_backends = {};
foreach my $request (@requests) {
$fetch_backends->{ $request->backend } ||=
Koha::Illrequest->new->load_backend( $request->backend );
}
# Pre-load the backend object to avoid useless backend lookup/loads
@requests = map { $_->_backend( $fetch_backends->{ $_->backend } ); $_ } @requests;
# Identify patrons & branches that
# we're going to need and get them
my $to_fetch = {
@ -69,7 +78,7 @@ sub list {
branches => {},
capabilities => {}
};
foreach my $req(@requests) {
foreach my $req (@requests) {
$to_fetch->{patrons}->{$req->borrowernumber} = 1 if $embed{patron};
$to_fetch->{branches}->{$req->branchcode} = 1 if $embed{library};
$to_fetch->{capabilities}->{$req->backend} = 1 if $embed{capabilities};
@ -104,8 +113,7 @@ sub list {
my @backends = keys %{$to_fetch->{capabilities}};
if (scalar @backends > 0) {
foreach my $bc(@backends) {
my $backend = Koha::Illrequest->new->load_backend($bc);
$to_fetch->{$bc} = $backend->capabilities;
$to_fetch->{$bc} = $fetch_backends->{$bc}->capabilities;
}
}
}