(Retrofit from trunk) Portal : Optimized column load in ManageBrick and BrowseBrick to improve performances

SVN:2.3[4407]
This commit is contained in:
Guillaume Lajarige
2016-09-21 14:17:26 +00:00
parent bfcc6ea239
commit 01ef529db2
2 changed files with 36 additions and 10 deletions

View File

@@ -259,7 +259,29 @@ class BrowseBrickController extends BrickController
{
$oSet = new DBObjectSet($oQuery);
}
// Optimizing the ObjectSet to retrieve only necessary columns
$aColumnAttrs = array();
foreach ($oSet->GetFilter()->GetSelectedClasses() as $sTmpClassAlias => $sTmpClassName)
{
if (isset($aLevelsProperties[$sTmpClassAlias]))
{
$aTmpLevelProperties = $aLevelsProperties[$sTmpClassAlias];
// Mandatory main attribute
$aTmpColumnAttrs = array($aTmpLevelProperties['name_att']);
// Optionnal attributes, only if in list mode
if ($sBrowseMode === BrowseBrick::ENUM_BROWSE_MODE_LIST)
{
foreach ($aTmpLevelProperties['fields'] as $aTmpField)
{
$aTmpColumnAttrs[] = $aTmpField['code'];
}
}
$aColumnAttrs[$sTmpClassAlias] = $aTmpColumnAttrs;
}
}
$oSet->OptimizeColumnLoad($aColumnAttrs);
// Retrieving results and organizing them for templating
$aItems = array();
while ($aCurrentRow = $oSet->FetchAssoc())

View File

@@ -59,6 +59,15 @@ class ManageBrickController extends BrickController
// Getting search value
$sSearchValue = $oRequest->get('sSearchValue', null);
// Getting area columns properties
$aColumnsAttrs = $oBrick->GetFields();
// Adding friendlyname attribute to the list is not already in it
$sTitleAttrCode = 'friendlyname';
if (($sTitleAttrCode !== null) && !in_array($sTitleAttrCode, $aColumnsAttrs))
{
$aColumnsAttrs = array_merge(array($sTitleAttrCode), $aColumnsAttrs);
}
// Starting to build query
$oQuery = DBSearch::FromOQL($oBrick->GetOql());
@@ -264,6 +273,7 @@ class ManageBrickController extends BrickController
// - Check how many records there is.
// - Update $sDataLoading with its new value regarding the number of record and the threshold
$oCountSet = new DBObjectSet($oQuery);
$oCountSet->OptimizeColumnLoad(array($oQuery->GetClassAlias() => $aColumnsAttrs));
$fThreshold = (float) MetaModel::GetModuleSetting($oApp['combodo.portal.instance.id'], 'lazy_loading_threshold');
$sDataLoading = ($oCountSet->Count() > $fThreshold) ? AbstractBrick::ENUM_DATA_LOADING_LAZY : AbstractBrick::ENUM_DATA_LOADING_FULL;
unset($oCountSet);
@@ -285,6 +295,7 @@ class ManageBrickController extends BrickController
// Getting total records number
$oCountSet = new DBObjectSet($oQuery);
$oCountSet->OptimizeColumnLoad(array($oQuery->GetClassAlias() => $aColumnsAttrs));
$aData['recordsTotal'] = $oCountSet->Count();
$aData['recordsFiltered'] = $oCountSet->Count();
unset($oCountSet);
@@ -296,6 +307,7 @@ class ManageBrickController extends BrickController
{
$oSet = new DBObjectSet($oQuery);
}
$oSet->OptimizeColumnLoad(array($oQuery->GetClassAlias() => $aColumnsAttrs));
$aSets[$sKey] = $oSet;
}
}
@@ -306,15 +318,7 @@ class ManageBrickController extends BrickController
{
// Set properties
$sCurrentClass = $sKey;
$sTitleAttrCode = 'friendlyname';
// Getting area columns properties
$aColumnsAttrs = $oBrick->GetFields();
// Adding friendlyname attribute to the list is not already in it
if (($sTitleAttrCode !== null) && !in_array($sTitleAttrCode, $aColumnsAttrs))
{
$aColumnsAttrs = array_merge(array($sTitleAttrCode), $aColumnsAttrs);
}
// Defining which attribute will open the edition form)
$sMainActionAttrCode = $aColumnsAttrs[0];