From 1804c24af6b02e25415dbf27fc75b3399ba79fde Mon Sep 17 00:00:00 2001 From: ivan Date: Sat, 31 Jan 2009 09:53:13 +0000 Subject: [PATCH] cache the results of ACL queries, should improve performance of customer view page for customers with shitloads of packages/services, RT#4696 --- FS/FS/access_user.pm | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/FS/FS/access_user.pm b/FS/FS/access_user.pm index a755daff6..21ed2b726 100644 --- a/FS/FS/access_user.pm +++ b/FS/FS/access_user.pm @@ -405,6 +405,17 @@ group membership, eventually also via user overrides). sub access_right { my( $self, $rightname ) = @_; + + #some caching of ACL requests for low-hanging fruit perf improvement + #since we get a new $CurrentUser object each page view there shouldn't be any + #issues with stickiness + if ( $self->{_ACLcache} ) { + return $self->{_ACLcache}{$rightname} + if exists($self->{_ACLcache}{$rightname}); + } else { + $self->{_ACLcache} = {}; + } + my $sth = dbh->prepare(" SELECT groupnum FROM access_usergroup LEFT JOIN access_group USING ( groupnum ) @@ -413,10 +424,14 @@ sub access_right { WHERE usernum = ? AND righttype = 'FS::access_group' AND rightname = ? + LIMIT 1 ") or die dbh->errstr; $sth->execute($self->usernum, $rightname) or die $sth->errstr; my $row = $sth->fetchrow_arrayref; - $row ? $row->[0] : ''; + + #$row ? $row->[0] : ''; + $self->{_ACLcache}{$rightname} = ( $row ? $row->[0] : '' ); + } =back -- 2.11.0