Kategorie - Funktionen im Backend sehr langsam
Kategorie - Funktionen im Backend sehr langsam
Hallo Leute,
wir setzen Contenido für unser zweisprachiges Firmenintranet ein und haben z. Zt. ca. 980 Artikel online.
Diese Seiten werden von 28 Bereichs-Redakteuren betreut.
Leider ist das Backend bei unseren Redakteuren, insbesondere in den "Kategorie-Funktionen" sehr langsam.
Dies liegt vermutlich an den eingeschränkten Berechtigungsprofilen der Benutzer.
Alle Administratoren haben diese Geschwindigkeitsprobleme nicht.
Gibt es da schon Abhilfe, Updates bzw. Bug-Fixes?
Über Eure Posts würde ich mich freuen.
Systemumgebung:
Contenido 4.6.8 / Fedora Linux / PHP 4.4.2 / MySQL 5.0.21
wir setzen Contenido für unser zweisprachiges Firmenintranet ein und haben z. Zt. ca. 980 Artikel online.
Diese Seiten werden von 28 Bereichs-Redakteuren betreut.
Leider ist das Backend bei unseren Redakteuren, insbesondere in den "Kategorie-Funktionen" sehr langsam.
Dies liegt vermutlich an den eingeschränkten Berechtigungsprofilen der Benutzer.
Alle Administratoren haben diese Geschwindigkeitsprobleme nicht.
Gibt es da schon Abhilfe, Updates bzw. Bug-Fixes?
Über Eure Posts würde ich mich freuen.
Systemumgebung:
Contenido 4.6.8 / Fedora Linux / PHP 4.4.2 / MySQL 5.0.21
nein dafür gibts nicht wirklich was...
hängt aber nicht mit der artikel anzahl sondern anzahl der kategorien zusammen...
...wenn viele einzelne berechtigungen kontrolliert werden müssen, kann ich mir durchaus vorstellen, dass das system ausgebremst wird...
hängt aber nicht mit der artikel anzahl sondern anzahl der kategorien zusammen...
...wenn viele einzelne berechtigungen kontrolliert werden müssen, kann ich mir durchaus vorstellen, dass das system ausgebremst wird...
*** make your own tools (wishlist :: thx)
ähm, ideen/vorschläge habe ich da nicht wirklich...
vielleicht wird es schneller wenn die benutzer nicht alle kategorien auf einmal aufmachen, sondern sich einzeln bis zu ihren bereich die kategorien öffnen... (ist jetzt nur ne annahme...)
ich hab zwar mal an einem neuen system gearbeitet, um den bereich dort zu beschleunigen, aber das ist weit davon entfernt fertig/freigegeben zu werden...
vielleicht wird es schneller wenn die benutzer nicht alle kategorien auf einmal aufmachen, sondern sich einzeln bis zu ihren bereich die kategorien öffnen... (ist jetzt nur ne annahme...)
ich hab zwar mal an einem neuen system gearbeitet, um den bereich dort zu beschleunigen, aber das ist weit davon entfernt fertig/freigegeben zu werden...
*** make your own tools (wishlist :: thx)
Hi emergence,emergence hat geschrieben:ähm, ideen/vorschläge habe ich da nicht wirklich...
vielleicht wird es schneller wenn die benutzer nicht alle kategorien auf einmal aufmachen, sondern sich einzeln bis zu ihren bereich die kategorien öffnen... (ist jetzt nur ne annahme...)
ich hab zwar mal an einem neuen system gearbeitet, um den bereich dort zu beschleunigen, aber das ist weit davon entfernt fertig/freigegeben zu werden...
hat er keine Chance, wenn er das hartverdrahtet? Also für bestimmte Redakteure diese Rechteüberprüfung rausnimmt und über manuelles SQL-Tuning gleich die Anzeige im Backend auf die Kats beschränkt?!
-
- Beiträge: 3215
- Registriert: Do 21. Okt 2004, 11:08
- Wohnort: Augsburg
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 17 Mal
- Kontaktdaten:
Hallo emergence,emergence hat geschrieben:ähm hartverdrahtet ?
versteh ich nicht ganz...
er meint wohl sowas wie
Code: Alles auswählen
if ($auth->auth['uname'] == 'redakteur_xy') {
...
}
Code: Alles auswählen
if ($perm->have_perm_area_action($my_area, $my_action)) {
...
}
Was man aber machen kann, ist die Menge an 'html' Code bei der Ausgabe zu reduzieren. Da kommt einiges an Output, wenn man viele Kategorien hat, und alle geöffnet sind. Das entlastet den Interpreter und den HTTP-Server.
Zudem können einige Codebereiche in der "include.str_overview.php" optimiert werden.
Die Performance wird sich bei 2-stelliger Kategorieanzahl wohl zw. 10% - 15% einpendeln, ab 100 oder mehr Kategorien ist mit deutlicher Geschwindigkeitszunahme zu rechnen.
Ich werde mich mal der Sache annehmen, vielleicht schaffe ich es, bis heute Abend eine optimierte Version zu erstellen, schaumermal...
Gruß
xmurrix
dem kann ich nur zustimmen... ist ein wahnsinnsaufwand das so zu handhaben...xmurrix hat geschrieben:Solche hart codierten Sachen bringen aber Probleme bei der zukünftigen Wartung von Code...
*** make your own tools (wishlist :: thx)
ich hab jetzt nur mal kurz den code angesehen..
da gibts mehrere passagen ala
anstelle der ersten zeile könnte man auch
verwenden... (hat den selben effekt, da zu allererst innerhalb der methode have_perm_area_action abgefragt wird...)
bringt vielleicht ne kleine beschleunigung...
da gibts mehrere passagen ala
Code: Alles auswählen
///////// "Kategorie umbenennen" Button
if($perm->have_perm_area_action($tmp_area, "str_renamecat") || $perm->have_perm_area_action_item($tmp_area, "str_renamecat", $value->id)) {
$tpl->set('d', 'RENAMEBUTTON', "<a class=action href=\"".$sess->url("main.php?area=$area&action=str_renamecat&frame=$frame&idcat=".$value->id)."#renamethis\"><img src=\"".$cfg["path"]["images"]."but_rename.gif\" border=\"0\" title=\"".i18n("Rename category")."\" alt=\"".i18n("Rename category")."\"></a>");
}else{
$tpl->set('d', 'RENAMEBUTTON', ' ');
}
Code: Alles auswählen
if($perm->have_perm_area_action_item($tmp_area, "str_renamecat", $value->id)) {
bringt vielleicht ne kleine beschleunigung...
*** make your own tools (wishlist :: thx)
-
- Beiträge: 3215
- Registriert: Do 21. Okt 2004, 11:08
- Wohnort: Augsburg
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 17 Mal
- Kontaktdaten:
Das wird auf jeden Fall die Abarbeitung des Scriptes beschleunigen...emergence hat geschrieben:ich hab jetzt nur mal kurz den code angesehen..
da gibts mehrere passagen ala
anstelle der ersten zeile könnte man auchCode: Alles auswählen
///////// "Kategorie umbenennen" Button if($perm->have_perm_area_action($tmp_area, "str_renamecat") || $perm->have_perm_area_action_item($tmp_area, "str_renamecat", $value->id)) { $tpl->set('d', 'RENAMEBUTTON', "<a class=action href="".$sess->url("main.php?area=$area&action=str_renamecat&frame=$frame&idcat=".$value->id)."#renamethis"><img src="".$cfg["path"]["images"]."but_rename.gif" border="0" title="".i18n("Rename category")."" alt="".i18n("Rename category").""></a>"); }else{ $tpl->set('d', 'RENAMEBUTTON', ' '); }
verwenden... (hat den selben effekt, da zu allererst innerhalb der methode have_perm_area_action abgefragt wird...)Code: Alles auswählen
if($perm->have_perm_area_action_item($tmp_area, "str_renamecat", $value->id)) {
bringt vielleicht ne kleine beschleunigung...
Diese Art von Berechtigungsabfragen tauchen im Backend an vielen Stellen auf, ist also ein Punkt, den man vielleicht bei zukünftiger Backend-Entwicklung mit aufgreifen sollte.
Noch ein Bereich ist z. B. die Verwendung der i18n()-Funktion in der Kategorien-Schleife:
Code: Alles auswählen
// schnellere variante
$tmp = i18n("Rename category");
foreach ($objects as $key => $value) {
$link = '<a href=".$tmp."></a>';
}
// langsamere variante
foreach ($objects as $key => $value) {
$link = '<a href=".i18n("Rename category")."></a>';
}

Gruß
xmurrix
-
- Beiträge: 3215
- Registriert: Do 21. Okt 2004, 11:08
- Wohnort: Augsburg
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 17 Mal
- Kontaktdaten:
So,
habe die Datei "include.str_overview.php" etwas auseinander genommen, und an einigen Stellen die Abarbeitung optimiert.
Außerdem ist auch das Template "template.str_overview.html" geändert worden.
Da es sich um viele Änderungen handelt, sollte das Ganze vorerst nicht in einem Produktiveinsatz eingesetzt werden.
Vorher natürlich die DB/Dateien sichern
Nun zum Resultat der Änderungen:
Bei einigen Testdurchläufen mit einem normalen User und 132 Kategorien wurde die Seite in ca. 0.7 Sekunden generiert, vorher waren es ca. 2 Sekunden.
Natürlich sind diese Werte nicht auf andere Contenido-Installationen übertragbar, aber die Tendenz zur Geschwindigkeitssteigerung ist gegeben.
Download:
include.str_overview-redesign.zip
Grüße
xmurrix
habe die Datei "include.str_overview.php" etwas auseinander genommen, und an einigen Stellen die Abarbeitung optimiert.
Außerdem ist auch das Template "template.str_overview.html" geändert worden.
Da es sich um viele Änderungen handelt, sollte das Ganze vorerst nicht in einem Produktiveinsatz eingesetzt werden.
Vorher natürlich die DB/Dateien sichern

Nun zum Resultat der Änderungen:
Bei einigen Testdurchläufen mit einem normalen User und 132 Kategorien wurde die Seite in ca. 0.7 Sekunden generiert, vorher waren es ca. 2 Sekunden.
Natürlich sind diese Werte nicht auf andere Contenido-Installationen übertragbar, aber die Tendenz zur Geschwindigkeitssteigerung ist gegeben.
Download:
include.str_overview-redesign.zip
Grüße
xmurrix
hab mir das gestern noch ein wenig angesehen...
die änderungen in dem template find ich sehr gut... (wirkt sich massiv in der menge an generiertem html aus...)
das checken der rechte find ich jetzt ganz okay gelöst...
obwohl ich eher dazu dentiere der perm klasse einen cache mechanismus zu verpassen...
die i18n änderungen find ich aber nicht so gut...
und zwar von der wartung her gesehen
ich denk mir da eher das eine zeitverzögerung bei i18n erst dann auftritt wenn die gettext extension nicht geladen wurde...
wenn sie nicht geladen ist, wird ja i18n emuliert und das ist leider ziemlich langsam... eine massive beschleunigung zeigt sich da wenn man innerhalb der contenido.po alle kommentare entfernt...
die strings könnte man da ebenfalls in einer variable cachen...
ich verschieb das mal nach bugs -> ist ja ne sinnvolle sache, das ganze zu beschleunigen...
die änderungen in dem template find ich sehr gut... (wirkt sich massiv in der menge an generiertem html aus...)
das checken der rechte find ich jetzt ganz okay gelöst...
obwohl ich eher dazu dentiere der perm klasse einen cache mechanismus zu verpassen...
die i18n änderungen find ich aber nicht so gut...
und zwar von der wartung her gesehen
Code: Alles auswählen
$aStri18n['Open category'] = i18n("Open category");
wenn sie nicht geladen ist, wird ja i18n emuliert und das ist leider ziemlich langsam... eine massive beschleunigung zeigt sich da wenn man innerhalb der contenido.po alle kommentare entfernt...
die strings könnte man da ebenfalls in einer variable cachen...
ich verschieb das mal nach bugs -> ist ja ne sinnvolle sache, das ganze zu beschleunigen...
*** make your own tools (wishlist :: thx)
-
- Beiträge: 3215
- Registriert: Do 21. Okt 2004, 11:08
- Wohnort: Augsburg
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 17 Mal
- Kontaktdaten:
Hallo emergence,
bin mir sicher, dass einiges natürlich besser zu Lösen ist, als ich es gemacht habe. Wollte nicht gleich alles auseinander nehmen
Damit ist es auch abwärtskompatibel.
Soweit ich ja mitbekommen habe, kommt bald eine neue Contenido-Version raus, da stellt sich mir die Frage, wieviel Zeit man in solche Änderungen investieren soll.
Vielleicht ist schon einiges integriert, also kann man davon ausgehen, dass die aktuellen cvs-Versionen den aktuellen Entwicklungsstand wiederspiegeln?
Gruß
xmurrix
bin mir sicher, dass einiges natürlich besser zu Lösen ist, als ich es gemacht habe. Wollte nicht gleich alles auseinander nehmen

Das habe ich mir auch schon gedacht, Änderungen an Dateien in conlib wirken sich auf das ganze System, deswegen halte ich mich da raus. Möglich wäre z. B. ein zusätzlicher Parameter zum Cachen der Berechtigung.das checken der rechte find ich jetzt ganz okay gelöst...
obwohl ich eher dazu dentiere der perm klasse einen cache mechanismus zu verpassen...
Code: Alles auswählen
function have_perm_area_action($area, $action = 0, $cache = false)
Stimmt, das ist nicht so gut.die i18n änderungen find ich aber nicht so gut...
und zwar von der wartung her gesehenCode: Alles auswählen
$aStri18n['Open category'] = i18n("Open category");
Auch wenn gettext geladen ist, ist das Cachen von mehrfach verwendeten Strings wohl schneller, als das über gettext zu holen. Bei i18n kann ich mir auch einen zusätzlichen Übergabeparameter zu Cachen des Strings vorstellen.ich denk mir da eher das eine zeitverzögerung bei i18n erst dann auftritt wenn die gettext extension nicht geladen wurde...
wenn sie nicht geladen ist, wird ja i18n emuliert und das ist leider ziemlich langsam... eine massive beschleunigung zeigt sich da wenn man innerhalb der contenido.po alle kommentare entfernt...
die strings könnte man da ebenfalls in einer variable cachen...
Soweit ich ja mitbekommen habe, kommt bald eine neue Contenido-Version raus, da stellt sich mir die Frage, wieviel Zeit man in solche Änderungen investieren soll.
Vielleicht ist schon einiges integriert, also kann man davon ausgehen, dass die aktuellen cvs-Versionen den aktuellen Entwicklungsstand wiederspiegeln?
Gruß
xmurrix