Storable dclone() is over 3x faster then Clone::clone() when used for
creating a deep copies of the big, complex data structures like MARC
frameworks. See also Bug 16044 comments #18 & #20.
This is a trivial version of Bug 16166. Performance test
results (see Bug 16140 comment #23 for test setup description):
master
146.29 (14.64+14.53+14.51+14.57+14.72+14.56+14.53+15.06+14.56+14.61)
master + Bug 16221
96.5 (9.77+9.63+9.77+9.77+9.68+9.05+9.68+9.83+9.63+9.69)
master + Bug 16166
90.7 (9.15+9.10+9.16+8.41+9.19+9.19+9.11+9.19+9.02+9.18)
Bug 16166 is a bit faster and more comprehensive implementation, but
also more complex and harder to test/evaluate.
Test plan:
1) apply patch
2) profile GetMarcStructure() calls before / after patch, e.g. by
running some script which calls it often (like catalogue search
w/ XSLT processing turned on, etc.)
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Tomas Cohen Arazi <tomascohen@unc.edu.ar>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
use strict;
use warnings;
use Carp;
-use Clone qw( clone );
+use Storable qw(dclone);
use Module::Load::Conditional qw(can_load);
use Koha::Cache::Object;
# Or if we do not need to deep copy
return $L1_cache{$key}
if not ref $L1_cache{$key} or $unsafe;
- return clone $L1_cache{$key};
+ return dclone $L1_cache{$key};
}
my $get_sub = $self->{ref($self->{$cache}) . "_get"};