Performance Problem komplexe Navigation
Verfasst: 11. Apr 2019, 15:20
Hallo liebe Redaxos,
evtl. kann mir jemand bei einem regelmäßig auftretenden Performanceproblem helfen - immer wieder dauert der Aufurf einer Seite (Unterseite) bis zu 120 Sekunden - zumindest lt. Serverlog.
Als wahrscheinlichsten Kandidaten habe ich die Navigation in Verdacht - hier mein code:
Ich denke, der code ist OK, bin aber nicht sicher, ob die Ausgabe hier auch ordentlich gecached wird/werden kann. In jedem Falle beobachte ich auf der Seite immer wieder, dass die Seite schon da ist, das Menu aber erst ne Sekunde oder zwie später erscheint?!
Hat jemand eine Idee - evtl. mach ich hier was grundsätzliches Falsch?
Bei der Gelegenheit - es ist ein Redaxo 5.6.5 / PHP 7.0.33
Wie läuft das eigentlich mit dem Cache? Wo kann ich prüfen, ob das sauer gecached wird (also in welchem Verzeichnis)?
Danke für die Hilfe schon im voraus!`
Oliwan
evtl. kann mir jemand bei einem regelmäßig auftretenden Performanceproblem helfen - immer wieder dauert der Aufurf einer Seite (Unterseite) bis zu 120 Sekunden - zumindest lt. Serverlog.
Als wahrscheinlichsten Kandidaten habe ich die Navigation in Verdacht - hier mein code:
Code: Alles auswählen
<?php
$path = explode("|",$this->getValue("path").$this->getValue("article_id")."|");
$path1 = ((!empty($path[1])) ? $path[1] : '');
$path2 = ((!empty($path[2])) ? $path[2] : '');
$nav_main = '';
$subMenuCount=1;
$subButton="";
$breadcrumb="";
foreach (rex_category::getRootCategories() as $lev1) {
$MaxLenName=15;
$enhance="";
$hidden_ids = array(15,20,21,22,46);
// Home und Footer-Links (AGB Wegbeschreibung Kontakt) sollen nicht in der Navi auftauchen
if ($lev1->isOnline(true) && (!in_array($lev1->getId(), $hidden_ids))) {
// 1st level start
$lev1Size = sizeof($lev1->getChildren());
$twoline="";
$NameLen=strlen(html_entity_decode($lev1->getValue('name')));
if ($NameLen>$MaxLenName){$enhance=" ";$MaxLenName=24;}
if ($lev1->getId() == $path1) {
$breadcrumb.=$lev1->getValue('name');
if ($lev1Size!='0'){
$nav_main .='<div class="select"><a href="javascript:toggle('."'sub".$subMenuCount."'".');" class="select">'.$enhance.htmlspecialchars($lev1->getValue('name')).$enhance.'<span id="sub'.$subMenuCount.'button" data-text="-" class="button">+</span></a>';
}else{
$nav_main .= '<div class="select"><a href="'.$lev1->getUrl().'" class="select">'.$enhance.htmlspecialchars($lev1->getValue('name')).$enhance.'</a>';
}
} else {
if ($twoline!=""){$twoline="class='twoLine'";}
if ($lev1Size!='0'){
$nav_main .='<div '.$twoline.' ><a href="javascript:toggle('."'sub".$subMenuCount."'".');">'.$enhance.htmlspecialchars($lev1->getValue('name')).$enhance.'<span id="sub'.$subMenuCount.'button" data-text="-" class="button">+</span></a>';
}else{
$nav_main .= '<div '.$twoline.'><a href="'.$lev1->getUrl().'">'.$enhance.htmlspecialchars($lev1->getValue('name')).$enhance.'</a>';
}
}
// 1st level start
$lev1Size = sizeof($lev1->getChildren());
if ($lev1Size != "0") {
$nav_main .= '
<ul>';
// START 2nd level categories
foreach ($lev1->getChildren() as $lev2):
if ($lev2->isOnline(true)) {
$twoline="";
if (strlen(html_entity_decode(htmlspecialchars($lev2->getValue('name'))))>$MaxLenName){$twoline="twoLine ";}
if ($lev2->getId() == $path2) {
$breadcrumb.=" - ".$lev2->getValue('name');
$nav_main .= '
<li id="sub'.$subMenuCount.'select" class="'.$twoline.'showMenu select"><a href="'.$lev2->getUrl().'" class="select">'.htmlspecialchars($lev2->getValue('name')).'</a></li>';
} else {
$nav_main .= '
<li id="sub'.$subMenuCount.'" class="'.$twoline.'hideMenu"><a href="'.$lev2->getUrl().'">'.htmlspecialchars($lev2->getValue('name')).'</a></li>';
}
}
endforeach;
// Aktive Stücke als Submenu einhängen
if ($lev1->getId()==16 && sizeof($titel)>0) {
for ($lo=0;$lo<sizeof($dbid);$lo++){
$lev2=$lev1->getChildren()[$lo];
$twoline="";
if (strlen(html_entity_decode($titel[$lo]))>15){$twoline="twoLine ";}
if ($lo+31 == $path2) {
$nav_main .= '
<li id="sub'.$subMenuCount.'select" class="'.$twoline.'showMenu select"><a href="'.$lev2->getUrl().'?id='.$dbid[$lo].'" class="select">'.str_replace("<","<",str_replace(">",">",htmlspecialchars($titel[$lo]))).'</a></li>';
} else {
$nav_main .= '
<li id="sub'.$subMenuCount.'" class="'.$twoline.'hideMenu"><a href="'.$lev2->getUrl().'?id='.$dbid[$lo].'">'.str_replace("<","<",str_replace(">",">",htmlspecialchars($titel[$lo]))).'</a></li>';
}
array_push($link,$lev2->getUrl().'?id='.$dbid[$lo]);
}
}
$nav_main .= '
</ul>';
$subMenuCount++;
}
$nav_main .= '
</div>';
}
}
echo $nav_main;
?>
Hat jemand eine Idee - evtl. mach ich hier was grundsätzliches Falsch?
Bei der Gelegenheit - es ist ein Redaxo 5.6.5 / PHP 7.0.33
Wie läuft das eigentlich mit dem Cache? Wo kann ich prüfen, ob das sauer gecached wird (also in welchem Verzeichnis)?
Danke für die Hilfe schon im voraus!`
Oliwan