WBCE CMS – Way Better Content Editing.
Du bist nicht angemeldet.
Hallo,
Pullrequests sind in Absprache mit colinax entstanden.
Vom Prinzip die gleiche Optimierung wie hier, einfach für den Seitenbaum im Adminbereich.
Bitte noch ausgiebig testen. Sollte aber unter Flat und Argos mit den neue platzierten Variablen {PAGE_TREE} und {JS_ADMIN} in den Pullrequests ohne Probleme funktionieren.
Danke für die Freigabe und Gruss
rjgamer
Beitrag geändert von rjgamer (20.11.2017 14:14:11)
Offline
colinax
Hab das Ganze zum einfacheren testen mal in einen eigenen Branch gemerged.
Sieht aber soweit gut aus.
Offline
rjgamer
Okidoki. Danke!
Fraggy 2.0 wird die zwei Changes im Adminbereich voraussetzen. Ist schon bekannt wann der nächste Release von WBCE kommt?
Beitrag geändert von rjgamer (20.11.2017 20:47:27)
Offline
Hab die Änderungen in den master Branch gemerged
Offline
Cool. Danke.
Offline
Es scheint so, als würde die Umstellung zu massiven Performanceeinbußen bis hin zu Timeouts führen, wenn es sich um sehr umfangreiche Auftritte mit mehreren hundert Seiten handelt. (https://forum.wbce.org/viewtopic.php?id=1851)
Issue: https://github.com/WBCE/WBCE_CMS/issues/327
Eine Lösung für dieses Problem wäre wichtig.
Code allein macht nicht glücklich. Jetzt spenden!
Offline
Mist. Gerade diese Woche bin ich mehrheitlich abwesend.
Ich schau mir die Sache in den nächsten Tagen mal an. Aber weis noch nicht wann.
Offline
florian
So, ich hatte paar Minuten Zeit und habe mich kurz mit der Problematik auseinandergesetzt.
Komisch ist natürlich, dass die template.inc plötzliche Probleme macht. In meinem damaligen Pullrequest habe ich nichts in der template.inc geändert. Doch der PageTree wird neu via Template Engine eingefügt und somit macht sich bei diesem riesen Haufen an HTML (wenn man viele Seiten hat), der "schlechte" Code der doch schon recht veralteten Template Engine (template.inc) bemerkbar. Das Problem hätte theoretisch wohl auch sonst irgendwo und irgendwann auftreten können.
Sobald ich mehr Zeit habe, werde ich versuchen die betroffene Stelle in der template.inc performanc-technisch zu tweaken. Wird aber wohl erst nächste Woche. Geht dies in Ordnung?
Offline
florian
Geht dies in Ordnung?
Sehr gern
Code allein macht nicht glücklich. Jetzt spenden!
Offline
Hier ein erster Tweak-Versuch. Bitte die Zeile 536-538 in der template.inc mit diesem Code ersetzen:
foreach ($this->varvals as $k => $v) {
$varvals_quoted[$k] = preg_replace(array('/\\\\/', '/\$/'), array('\\\\\\\\', '\\\\$'), $v);
}
Sollte nun um einiges besser laufen. Bitte testen, am besten dort mit dem >500 Seiten.
Muss nun wieder Arbeiten und die nächsten zwei Tage an einen Workshop. Evt. kann ich am Donnerstagabend oder Freitagabend noch was bewirken. Wäre daher froh um euer Feedback.
Offline
Setzt der Tweak PHP7 voraus?
Code allein macht nicht glücklich. Jetzt spenden!
Offline
Nope. PHP 5.x kompatibel.
Hier noch der Beweis warum gerade die Zeile 536 echt alter und performance-technisch schrecklicher Code ist: http://php.net/manual/de/function.each.php#75692
Weiter ist die each() Funktion deprecated gemäss php.net: This function has been DEPRECATED as of PHP 7.2.0. Relying on this function is highly discouraged.
Beitrag geändert von rjgamer (24.01.2018 14:36:59)
Offline
Ok, danke für die Infos. Ich schau mal, wo ich das testen kann.
Code allein macht nicht glücklich. Jetzt spenden!
Offline
bringt leider keine Verbesserung.
Test mit 750 Seiten, PHP 7.0.26, WBCE 1.3.1
Rechenzeit sowohl mit als auch ohne Änderung
- ca. 14 Sekunden mit Argos Reloaded,
- ca. 30 Sekunden mit Flat-Theme,
- ca. 40 Sekunden mit Fraggy,
Irritierenderweise läuft der Pagetree in einen Timeout (max_execution_time ist bei 45 Sek.), wenn bei JS Admin alle Optionen deaktiviert sind, d.h. die bremsen den gar nicht aus o_O
Code allein macht nicht glücklich. Jetzt spenden!
Offline
Ist das Problem nur bei der Installation von willi?
Oder hast du eine eigene Installation mit 750 Seiten verwendet? Wenn ja, wie hast du auf die schnelle 750 Seiten erstellt/generiert?
Gruss
Offline
Ich habe eine Testinstallation mit einem quick&dirty abgewandelten Uraltmodul gebaut, hängt hier an, das auf einen Schlag 150 Seiten generiert (Seitentitel = microtime, übergeordnete Seite in Zeile 348 der tool.php anpassen).
Beitrag geändert von florian (24.01.2018 16:20:19)
Code allein macht nicht glücklich. Jetzt spenden!
Offline
Kannst du mal Zeile 537 in der template.inc mit diesem Code ersetzen:
$varvals_quoted[$k] = str_replace(array('\\\\', '\$'), array('\\\\\\\\', '\\\\$'), $v);
Werde es dann auch noch mit dem Testmodul probieren.
Offline
Aber hallo!!11!
Damit ist der Baum ratzfatz aufgebaut. Wenn das jetzt keine sonstigen Einbußen hinsichtlich Sicherheit bedeutet, wäre das ja genial.
Code allein macht nicht glücklich. Jetzt spenden!
Offline
Das Problem lag somit beim preg_replace, weil bei sovielen Seiten auch viel HTML in den Variablen war und Regex schlichtweg zu lange brauchte. Bin mir einfach nicht sicher ob es einfach so reicht preg_replace mit str_replace zu ersetzen. Aber irgendwie macht Regex hier wirklich keinen Sinn.
Aber warum hier jetzt Doppel-Backslash und das $-Zeichen mit jeweils Doppel-Backslash "gequotet" werden, ergibt sich mir nicht. Bin offen wenn mich hier einer aufklärt ohne dass ich jetzt selber stundenlang den Code reverse-engineeren muss
Hab noch einen Fehler gefunden. Bitte die Zeile 537 mit diesem Code aktualisieren
[== PHP ==]
$varvals_quoted[$k] = str_replace(array('\\\\', '$'), array('\\\\\\\\', '\\\\$'), $v);
Offline
Hm, komisches Phänomen, leg mal eine Seite mit z.B. "$100 Reward!" als Titel an.... da wird dann "0 Reward!" draus.
Code allein macht nicht glücklich. Jetzt spenden!
Offline
Jetzt muss es gehen:
$varvals_quoted[$k] = str_replace(array('\\\\', '$'), array('\\\\\\\\', '\$'), $v);
Ich hab jetzt leider keine Zeit mehr. Bitte gib mir nochmals kurz Rückmeldung. Es wäre evt. gut wenn man den Fix in der template.inc dann noch intensiv testet (im ganzen Backend und Frontend).
Beitrag geändert von rjgamer (24.01.2018 16:46:54)
Offline
florian
yep, sieht gut aus
Code allein macht nicht glücklich. Jetzt spenden!
Offline
Ich guck mir das heute Nacht auch nochmal an, habe ja noch die lokale Version eines Projektes mit >500 Seiten da.
... nein in Europa verwenden wir beim Programmieren nicht € statt $ ...
Offline
florian
Also, aktueller Stand, um das zusammenzufassen:
In der /include/phplib/template.inc die Zeilen
while (list($k, $v) = each($this->varvals)) {
$varvals_quoted[$k] = preg_replace(array('/\\\\/', '/\$/'), array('\\\\\\\\', '\\\\$'), $v);
}
ersetzen durch
foreach ($this->varvals as $k => $v) {
$varvals_quoted[$k] = str_replace(array('\\\\', '$'), array('\\\\\\\\', '\$'), $v);
}
bringt bei mir einen Riesen-Performancegewinn (Seitenbaum mit 750 Seiten in 6 Sekunden da) und zeigt beim Herumklicken im FE und BE bislang keine Probleme, komische Titel mit $ und <script> und sowas verursachen auch keine Auffälligkeiten.
Dennoch auch von mir die Bitte, das mal zu testen.
Beitrag geändert von florian (24.01.2018 17:17:19)
Code allein macht nicht glücklich. Jetzt spenden!
Offline
Sodele,
(alles auf "localhost" mit WBCE1.3.1 und PHP7.0.27 - Durchschnittszeiten aus jeweils 10 Versuchen - Zeitmessung mittels microtime am Anfang und Ende der admin/pages/index.php)
A:)
bei der 540-Seiten Installation macht sich der Zeitunterschied zwar bemerkbar, ist aber bei der Seitenzahl noch nicht so wirklich gravierend: von ø7,9 sec auf ø 1,2 sec (Argos reloaded)
B:)
ich hab dann mal 'ne Testinstallation mit Florians Script auf 1050 Seiten (bis zum erreichen des Standard-Timeout) aufgeblasen (auch tief verschachtelt), da wirds dann doch ziemlich deutlich:
von ø 32,1 sec auf ø 10,7sec (Argos reloaded)
bzw. ø 22,4 sec auf ø 3,9 sec (Flat Theme)
Nebenwirkungen sind mir bis jetzt noch keine aufgefallen, ich kann die Änderung jedoch mit Einverständnis meiner Lieblingskundin auf 4 Seiten in freier Wildbahn testen.
... nein in Europa verwenden wir beim Programmieren nicht € statt $ ...
Offline