performance enhancements

This commit is contained in:
JT Smith 2005-09-19 18:38:44 +00:00
parent 8dc65ce3d5
commit ee1e7e870c
4 changed files with 38 additions and 17 deletions

View file

@ -7,6 +7,8 @@
- Fixed Survey copy bug that was preventing section data from being copied. - Fixed Survey copy bug that was preventing section data from being copied.
- Workedaround a bug for broken xml docs in Syndicated Content. (mwilson) - Workedaround a bug for broken xml docs in Syndicated Content. (mwilson)
- fix [ 1293947 ] 6.7.3 Cannot use a second AssetProxy with IE, Stack overflow (Wouter van Oijen / ProcoliX) - fix [ 1293947 ] 6.7.3 Cannot use a second AssetProxy with IE, Stack overflow (Wouter van Oijen / ProcoliX)
- Added a few more performance enhanceers which can cut the number of
database queries per page in half in some cases.
6.7.4 6.7.4
- fix [ 1279861 ] POD errors in 6.7.3 - fix [ 1279861 ] POD errors in 6.7.3

View file

@ -963,11 +963,12 @@ sub new {
my $assetId = shift; my $assetId = shift;
return undef unless ($assetId); return undef unless ($assetId);
my $className = shift; my $className = shift;
my $revisionDate = shift; my $revisionDate = shift || $session{assetRevision}{$assetId}{$session{scratch}{versionTag}||'_'};
unless ($revisionDate) { unless ($revisionDate) {
($revisionDate) = WebGUI::SQL->quickArray("select max(revisionDate) from assetData where assetId=" ($revisionDate) = WebGUI::SQL->quickArray("select max(revisionDate) from assetData where assetId="
.quote($assetId)." and (status='approved' or status='archived' or tagId=".quote($session{scratch}{versionTag}).") .quote($assetId)." and (status='approved' or status='archived' or tagId=".quote($session{scratch}{versionTag}).")
group by assetData.assetId order by assetData.revisionDate"); group by assetData.assetId order by assetData.revisionDate");
$session{assetRevision}{$assetId}{$session{scratch}{versionTag}||'_'} = $revisionDate unless ($session{config}{disableCache});
} }
return undef unless ($revisionDate); return undef unless ($revisionDate);
if ($className) { if ($className) {
@ -1023,7 +1024,11 @@ sub newByDynamicClass {
my $assetId = shift; my $assetId = shift;
my $revisionDate = shift; my $revisionDate = shift;
return undef unless defined $assetId; return undef unless defined $assetId;
my ($className) = WebGUI::SQL->quickArray("select className from asset where assetId=".quote($assetId)); my $className = $session{assetClass}{$assetId};
unless ($className) {
($className) = WebGUI::SQL->quickArray("select className from asset where assetId=".quote($assetId));
$session{assetClass}{$assetId} = $className unless ($session{config}{disableCache});
}
return undef unless ($className); return undef unless ($className);
return WebGUI::Asset->new($assetId,$className,$revisionDate); return WebGUI::Asset->new($assetId,$className,$revisionDate);
} }

View file

@ -248,7 +248,11 @@ Returns the highest rank, top of the highest rank Asset under current Asset.
sub getFirstChild { sub getFirstChild {
my $self = shift; my $self = shift;
unless (exists $self->{_firstChild}) { unless (exists $self->{_firstChild}) {
my ($lineage) = WebGUI::SQL->quickArray("select min(asset.lineage) from asset,assetData where asset.parentId=".quote($self->getId)." and asset.assetId=assetData.assetId and asset.state='published'"); my $lineage = $session{assetLineage}{firstChild}{$self->getId};
unless ($lineage) {
($lineage) = WebGUI::SQL->quickArray("select min(asset.lineage) from asset,assetData where asset.parentId=".quote($self->getId)." and asset.assetId=assetData.assetId and asset.state='published'");
$session{assetLineage}{firstChild}{$self->getId} = $lineage unless ($session{config}{disableCache});
}
$self->{_firstChild} = WebGUI::Asset->newByLineage($lineage); $self->{_firstChild} = WebGUI::Asset->newByLineage($lineage);
} }
return $self->{_firstChild}; return $self->{_firstChild};
@ -266,7 +270,11 @@ Returns the lowest rank, bottom of the lowest rank Asset under current Asset.
sub getLastChild { sub getLastChild {
my $self = shift; my $self = shift;
unless (exists $self->{_lastChild}) { unless (exists $self->{_lastChild}) {
my ($lineage) = WebGUI::SQL->quickArray("select max(asset.lineage) from asset,assetData where asset.parentId=".quote($self->getId)." and asset.assetId=assetData.assetId and asset.state='published'"); my $lineage = $session{assetLineage}{lastChild}{$self->getId};
unless ($lineage) {
($lineage) = WebGUI::SQL->quickArray("select max(asset.lineage) from asset,assetData where asset.parentId=".quote($self->getId)." and asset.assetId=assetData.assetId and asset.state='published'");
$session{assetLineage}{lastChild}{$self->getId} = $lineage;
}
$self->{_lastChild} = WebGUI::Asset->newByLineage($lineage); $self->{_lastChild} = WebGUI::Asset->newByLineage($lineage);
} }
return $self->{_lastChild}; return $self->{_lastChild};
@ -592,7 +600,13 @@ Lineage string.
sub newByLineage { sub newByLineage {
my $self = shift; my $self = shift;
my $lineage = shift; my $lineage = shift;
my ($id,$class) = WebGUI::SQL->quickArray("select assetId, className from asset where lineage=".quote($lineage)); my $id = $session{assetLineage}{$lineage}{id};
my $class = $session{assetLineage}{$lineage}{class};
unless ($id && $class) {
($id,$class) = WebGUI::SQL->quickArray("select assetId, className from asset where lineage=".quote($lineage));
$session{assetLineage}{$lineage}{id} = $id unless ($session{config}{disableCache});
$session{assetLineage}{$lineage}{class} = $class unless ($session{config}{disableCache});
}
return WebGUI::Asset->new($id, $class); return WebGUI::Asset->new($id, $class);
} }

View file

@ -230,7 +230,7 @@ sub getGroupsForUser {
foreach my $gid (@groups) { foreach my $gid (@groups) {
$session{isInGroup}{$userId}{$gid} = 1; $session{isInGroup}{$userId}{$gid} = 1;
} }
$session{gotGroupsForUser}{$userId} = \@groups; $session{gotGroupsForUser}{$userId} = \@groups unless ($session{config}{disableCache});
return \@groups; return \@groups;
} }
} }
@ -278,7 +278,7 @@ sub getGroupsInGroup {
my $gog = getGroupsInGroup($group,1,$loopCount); my $gog = getGroupsInGroup($group,1,$loopCount);
push(@groupsOfGroups, @$gog); push(@groupsOfGroups, @$gog);
} }
$session{gotGroupsInGroup}{recursive}{$groupId} = \@groupsOfGroups; $session{gotGroupsInGroup}{recursive}{$groupId} = \@groupsOfGroups unless ($session{config}{disableCache});
return \@groupsOfGroups; return \@groupsOfGroups;
} }
$session{gotGroupsInGroup}{direct}{$groupId} = $groups; $session{gotGroupsInGroup}{direct}{$groupId} = $groups;
@ -351,7 +351,7 @@ sub isInGroup {
unless ($secondRun) { # don't look up user groups if we've already done it once. unless ($secondRun) { # don't look up user groups if we've already done it once.
my $groups = WebGUI::Grouping::getGroupsForUser($uid,1); my $groups = WebGUI::Grouping::getGroupsForUser($uid,1);
foreach (@{$groups}) { foreach (@{$groups}) {
$session{isInGroup}{$uid}{$_} = 1; $session{isInGroup}{$uid}{$_} = 1 unless ($session{config}{disableCache});
} }
if ($session{isInGroup}{$uid}{$gid} eq '1') { if ($session{isInGroup}{$uid}{$gid} eq '1') {
return 1; return 1;
@ -370,7 +370,7 @@ sub isInGroup {
my @ips = split(";",$group{ipFilter}); my @ips = split(";",$group{ipFilter});
foreach my $ip (@ips) { foreach my $ip (@ips) {
if ($session{env}{REMOTE_ADDR} =~ /^$ip/) { if ($session{env}{REMOTE_ADDR} =~ /^$ip/) {
$session{isInGroup}{$uid}{$gid} = 1; $session{isInGroup}{$uid}{$gid} = 1 unless ($session{config}{disableCache});
return 1; return 1;
} }
} }
@ -385,7 +385,7 @@ sub isInGroup {
foreach my $var (@vars) { foreach my $var (@vars) {
my ($name, $value) = split(/\=/,$var); my ($name, $value) = split(/\=/,$var);
if ($session{scratch}{$name} eq $value) { if ($session{scratch}{$name} eq $value) {
$session{isInGroup}{$uid}{$gid} = 1; $session{isInGroup}{$uid}{$gid} = 1 unless ($session{config}{disableCache});
return 1; return 1;
} }
} }
@ -399,7 +399,7 @@ sub isInGroup {
($karma) = WebGUI::SQL->quickHash("select karma from users where userId=".quote($uid)); ($karma) = WebGUI::SQL->quickHash("select karma from users where userId=".quote($uid));
} }
if ($karma >= $group{karmaThreshold}) { if ($karma >= $group{karmaThreshold}) {
$session{isInGroup}{$uid}{$gid} = 1; $session{isInGroup}{$uid}{$gid} = 1 unless ($session{config}{disableCache});
return 1; return 1;
} }
} }
@ -418,13 +418,13 @@ sub isInGroup {
} else { } else {
my ($result) = $sth->array; my ($result) = $sth->array;
if ($result == 1) { if ($result == 1) {
$session{isInGroup}{$uid}{$gid} = 1; $session{isInGroup}{$uid}{$gid} = 1 unless ($session{config}{disableCache});
if ($group{dbCacheTimeout} > 0) { if ($group{dbCacheTimeout} > 0) {
WebGUI::Grouping::deleteUsersFromGroups([$uid],[$gid]); WebGUI::Grouping::deleteUsersFromGroups([$uid],[$gid]);
WebGUI::Grouping::addUsersToGroups([$uid],[$gid],$group{dbCacheTimeout}); WebGUI::Grouping::addUsersToGroups([$uid],[$gid],$group{dbCacheTimeout});
} }
} else { } else {
$session{isInGroup}{$uid}{$gid} = 0; $session{isInGroup}{$uid}{$gid} = 0 unless ($session{config}{disableCache});
WebGUI::Grouping::deleteUsersFromGroups([$uid],[$gid]) if ($group{dbCacheTimeout} > 0); WebGUI::Grouping::deleteUsersFromGroups([$uid],[$gid]) if ($group{dbCacheTimeout} > 0);
} }
} }
@ -457,13 +457,13 @@ sub isInGroup {
} }
if(isIn($params->{connectDN},@{$people})) { if(isIn($params->{connectDN},@{$people})) {
$session{isInGroup}{$uid}{$gid} = 1; $session{isInGroup}{$uid}{$gid} = 1 unless ($session{config}{disableCache});
if ($group{dbCacheTimeout} > 10) { if ($group{dbCacheTimeout} > 10) {
WebGUI::Grouping::deleteUsersFromGroups([$uid],[$gid]); WebGUI::Grouping::deleteUsersFromGroups([$uid],[$gid]);
WebGUI::Grouping::addUsersToGroups([$uid],[$gid],$group{dbCacheTimeout}); WebGUI::Grouping::addUsersToGroups([$uid],[$gid],$group{dbCacheTimeout});
} }
} else { } else {
$session{isInGroup}{$uid}{$gid} = 0; $session{isInGroup}{$uid}{$gid} = 0 unless ($session{config}{disableCache});
WebGUI::Grouping::deleteUsersFromGroups([$uid],[$gid]) if ($group{dbCacheTimeout} > 10); WebGUI::Grouping::deleteUsersFromGroups([$uid],[$gid]) if ($group{dbCacheTimeout} > 10);
} }
$ldapLink->unbind; $ldapLink->unbind;
@ -478,11 +478,11 @@ sub isInGroup {
foreach (@{$groups}) { foreach (@{$groups}) {
$session{isInGroup}{$uid}{$_} = isInGroup($_, $uid, 1); $session{isInGroup}{$uid}{$_} = isInGroup($_, $uid, 1);
if ($session{isInGroup}{$uid}{$_}) { if ($session{isInGroup}{$uid}{$_}) {
$session{isInGroup}{$uid}{$gid} = 1; # cache current group also so we don't have to do the group in group check again $session{isInGroup}{$uid}{$gid} = 1 unless ($session{config}{disableCache}); # cache current group also so we don't have to do the group in group check again
return 1; return 1;
} }
} }
$session{isInGroup}{$uid}{$gid} = 0; $session{isInGroup}{$uid}{$gid} = 0 unless ($session{config}{disableCache});
return 0; return 0;
} }