From 20ed8b3decd918c3afaba7ec0f23f60a9dec7d65 Mon Sep 17 00:00:00 2001 From: Jacek Ablewicz Date: Thu, 7 Apr 2016 10:26:31 +0200 Subject: [PATCH] Bug 16221: Use Storable::dclone() instead of Clone::clone() for L1 cache deep-copying mode 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): 146.29 (14.64+14.53+14.51+14.57+14.72+14.56+14.53+15.06+14.56+14.61) 96.5 (9.77+9.63+9.77+9.77+9.68+9.05+9.68+9.83+9.63+9.69) 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.) --- Koha/Cache.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Koha/Cache.pm b/Koha/Cache.pm index 8370d3e..c269184 100644 --- a/Koha/Cache.pm +++ b/Koha/Cache.pm @@ -38,7 +38,7 @@ The first, traditional OO interface provides the following functions: 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; @@ -325,7 +325,7 @@ sub get_from_cache { # 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"}; -- 1.7.10.4