make_cms_type / Funktion in statische Methode

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

make_cms_type / Funktion in statische Methode

Beitrag von Leo » Fr 18. Aug 2017, 11:14

Hallo Contenido-Gemeinde,

ich stelle gerade einige Funktionen aus Performancesgründen als Methode um. Zu einer Funktion, die der liebe Ortwin entwickelt hat, habe ich eine Frage. Bringt eine Umstellung etwas? Bei Messungen konnte ich keine deutliche Verbesserung feststellen. Habe ich einen Denkfehler in meiner Klasse, siehe Code?

Code: Alles auswählen

class MakeCmsType
{

    public static function make_cms_type( $container_type, $container_id ) {
        $typeGenerator = new cTypeGenerator();
        $tmp = $typeGenerator->getGeneratedCmsTag($container_type, $container_id);

        $tmp_output = str_replace('\\\"','"',$tmp);
        $tmp_output = stripslashes($tmp_output);

        return $tmp_output;
    }

}
Eine Sache habe ich aber schon festgestellt. Wenn ich z.B. direkt im CMS-Modul z.B. "CMS_IMGEDITOR" 50 mal erzeugt, geht dies sehr schnell.

Code: Alles auswählen

    $arr = ["CMS_IMGEDITOR[100]","CMS_IMGEDITOR[101]","CMS_IMGEDITOR[102]","CMS_IMGEDITOR[103]","CMS_IMGEDITOR[104]","CMS_IMGEDITOR[105]","CMS_IMGEDITOR[107]","CMS_IMGEDITOR[108]","CMS_IMGEDITOR[109]","CMS_IMGEDITOR[110]","CMS_IMGEDITOR[110]","CMS_IMGEDITOR[111]","CMS_IMGEDITOR[112]","CMS_IMGEDITOR[113]","CMS_IMGEDITOR[114]","CMS_IMGEDITOR[115]","CMS_IMGEDITOR[116]","CMS_IMGEDITOR[117]","CMS_IMGEDITOR[118]","CMS_IMGEDITOR[119]","CMS_IMGEDITOR[120]"];

    foreach($arr as $a){
        echo $a."<br>";
    }
Über die Funktion ist die Erzeugung deutlich langsamer. Leider kann man damit nicht dynamisch arbeiten. Deshalb ist die Funktion von Ortwin eine große Hilfe.

Vielen Dank für eure Hilfe!

VG
Leonhard

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: make_cms_type / Funktion in statische Methode

Beitrag von Oldperl » Sa 19. Aug 2017, 08:40

Servus Leonhard,

also das mit deinem Vergleich ist so wie der Vergleich mit den Äpfeln und Birnen. :roll:
Die beiden Umsetzungen sind grundverschieden wenn man sich anschaut was passiert. Wie Du aber selbst schon bemerkt hast, geht es im 2. Fall eben nicht dynamisch. Die CMC-Types sind eigentlich nur Platzhalter, für die nur der Platzhalter gegen ein Stückchen Code ausgetauscht wird. Das ist sicherlich und definitiv schneller, als die Nutzung von Klassen, zumal die Klasse cTypeGenerator selbst auch noch genug Overhead erzeugt.
Auch war meine damalige Umsetzung nicht auf Performance optimiert, da ging es mehr darum, das es funktioniert. :wink:

Persönlich würde ich es inzwischen auch etwas anders machen. Ich würde mir die verwendeten Klassen anschauen und nur wirklich benötigte Methoden und Funktionen in einer eigenen Klasse nutzen um besagten Overhead zu minimieren.

Es freut mich aber, das meine "alten" Funktionen auch weiterhin Verwendung finden. :D

Gruß aus Franken

(der liebe) :mrgreen: Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Re: make_cms_type / Funktion in statische Methode

Beitrag von Leo » Sa 19. Aug 2017, 11:01

Hallo Ortwin,

deine Antwort habe ich befürchtet. Leider habe ich dafür momentan keine Zeit, um mir in Ruhe die einzelnen Klassen deiner Funktion anzuschauen. Es war also sinnlos aus der Funktion eine statische Klasse zu machen. Ich hatte es mir schon gedacht. Egal! Naja, ich bin gerade dabei einiges zu optimieren und dabei ist mir eben das Problem aufgefallen und ich bin auf deine "alte" Klasse gestoßen. War auch nicht als Vorwurf gemeint. Die Funktion war immer hilfreich.

Welche Klassen müsste man bei einer eigenen Klasse berücksichtigen? Vielen Dank vorab!

Ansonsten packe ich es auf die ToDo-Liste.

Viele Grüße
Leonhard

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: make_cms_type / Funktion in statische Methode

Beitrag von Oldperl » So 20. Aug 2017, 08:45

Servus Leonhard,

wo bist du denn "drauf gestoßen"? War das Teil noch für 4.8 oder schon für 4.9?
Leo hat geschrieben:
Sa 19. Aug 2017, 11:01
Welche Klassen müsste man bei einer eigenen Klasse berücksichtigen?
Nun so aus dem Stegreif denke ich mal die Klassen, die meine Klasse/Funktion nutzt. Die Core-Klassen von Contenido sind recht oft nicht Performance optimiert. Da kann man, wenn man die Idee übernimmt und den Code selbst strickt, oft noch richtig viel raus holen bzw. verbessern. Da ich jetzt nicht genau weiß wo du meinen Code her hast, kann ich nicht wirklich nachschauen um welche Bereiche es sich handelt.

Zur Zeit habe ich aber auch für Überarbeitungen meiner "alten" Sachen eigentlich keine Zeit, da sowohl der waShop Pro für Contenido 4.9 momentan in der Testphase beim Kunden ist und ich jetzt endlich auch meine ConLite 2.0, die bereits auf diversen Webs läuft, zum Release bringen will/muss, da zum Ende des Jahres der Update-Support von PHP 5.6 ausläuft, und ich noch einige Kunden mit stark modifizierten 4.8ern habe, die das kostenintensive Upgrade auf 4.9 nicht machen möchten, jedoch auch planen auf PHP 7 umzustellen, und ansonsten zu anderen CMS abwandern würden.

Sollten die Sachen von mir für 4.9 gewesen sein, könnte man mal über ein Plugin zur Erweiterung des Modulbereiches nachdenken, in dem solche Helferklassen für Modulin- und output mal gesammelt werden könnten. Keine Ahnung ob so etwas noch gebraucht wird, denn momentan ist es, nun sagen wir mal, sehr ruhig hier im Forum geworden. Daher kann ich nicht sagen, ob die 4.9er überhaupt noch eine realistische Zukunft hat. Na mal schaun... Tod gesagte leben ja oft extrem lang. :mrgreen:

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: make_cms_type / Funktion in statische Methode

Beitrag von Faar » Mo 21. Aug 2017, 14:03

Oldperl hat geschrieben:
So 20. Aug 2017, 08:45
..., sehr ruhig hier im Forum geworden.
Nur weil es ruhig ist, heißt es nicht, dass nicht fleißig gearbeitet werden würde :motz:
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Re: make_cms_type / Funktion in statische Methode

Beitrag von Leo » Mo 21. Aug 2017, 17:28

Hallo Ortwin,

ich verwende die Version 4.9. Besser gesagt, ich habe ein Upgrade auf das 4.9 durchgeführt und habe dann ein wichtiges CMS-Modul von mir aktualisiert. Es war dringend nötig. Ich habe viele Funktionen in meinem Modul in eine eigene Klasse verfrachtet. Außerdem habe ich noch vorhandenen HTML-Kram in HTML-Templates ausgelagert, wie sich das gehört. Das Modul war sehr alt. Nach der Umstellung ist mir aber aufgefallen, dass dieses Modul ab einem gewissen Grad recht langsam wird. Je häufiger die Klasse aufgerufen wird, um so langsamer wird der Aufbau (ab zirka 30 Aufrufen). Das Modul funktioniert so. Man legt fest, welches Layout man haben möchte. Entsprechend erscheinen dann die Eingabemöglichkeiten für den Anwender(z.B. Teaser, Ein- oder Zweispalter, Bildergalerie usw.). Ich habe dann das gesamte Modul geprüft. Anscheinend verursacht irgendeine Funktion od. Klasse zu viel Last oder das Problem liegt noch irgendwo anders. Ich glaube, es liegt aber nicht direkt an der Funktion, sondern an dem Object cTypeGenerator, was aufgerufen wird.

So habe ich deine Funktion ausgelagert:

Ich habe eine Klasse mit dem Namen MakeCmsType angelegt:

Code: Alles auswählen

class MakeCmsType
{

    public static function make_cms_type( $container_type, $container_id ) {
        $typeGenerator = new cTypeGenerator();
        $tmp = $typeGenerator->getGeneratedCmsTag($container_type, $container_id);

        $tmp_output = str_replace('\\\"','"',$tmp);
        $tmp_output = stripslashes($tmp_output);

        return $tmp_output;
    }

}
und damit rufe ich diese auf:

Code: Alles auswählen

$path = MakeCmsType::make_cms_type("CMS_IMG",1);
Was mir noch aufgefallen ist, im Frontend arbeitet das Modul deutlich schneller. Die Ausgabe der Inhalte funktioniert dort ähnlich, deshalb wundert mich der Unterschied. Wahrscheinlich muss ich mir das Objekt cTypeGenerator in Ruhe anschauen. Soweit, wie ich die Funktion verstanden habe, holt es sich den entsprechenden CMS_Type und weißt Ihm den Content zu.

Zu deiner letzten Anmerkung: Mittlerweile habe ich mein Leistungsspektrum deutlich erweitert müssen. Ich arbeite jetzt häufig mit Typo3 und Wordpress, obwohl das nicht immer ein Vergnügen ist. Die letzte Anfrage zu Contenido ist schon etwas her. Momentan pflege ich die vorhandenen Contenido-Version noch und führe, wenn gewollt ist, ein Upgrade durch. Ich möchte ja die Kunden nicht hängen lassen.

Viele Grüße
Leonhard

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: make_cms_type / Funktion in statische Methode

Beitrag von Oldperl » Di 22. Aug 2017, 09:06

Faar hat geschrieben:
Mo 21. Aug 2017, 14:03
Oldperl hat geschrieben:
So 20. Aug 2017, 08:45
..., sehr ruhig hier im Forum geworden.
Nur weil es ruhig ist, heißt es nicht, dass nicht fleißig gearbeitet werden würde :motz:
Seit wann arbeitest Du was Frank? :mrgreen: *duck*

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: make_cms_type / Funktion in statische Methode

Beitrag von Faar » Di 22. Aug 2017, 09:11

Oldperl hat geschrieben:
Di 22. Aug 2017, 09:06
Faar hat geschrieben:
Mo 21. Aug 2017, 14:03
Oldperl hat geschrieben:
So 20. Aug 2017, 08:45
..., sehr ruhig hier im Forum geworden.
Nur weil es ruhig ist, heißt es nicht, dass nicht fleißig gearbeitet werden würde :motz:
Seit wann arbeitest Du was Frank? :mrgreen: *duck*
Seit ich denken kann! 8)

Oh :shock:
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: make_cms_type / Funktion in statische Methode

Beitrag von Oldperl » Di 22. Aug 2017, 09:18

Faar hat geschrieben:
Di 22. Aug 2017, 09:11
Seit ich denken kann! 8)

Oh :shock:
:mrgreen: Die Frage, die mir dazu ganz spontan einfällt, stelle ich nun mal lieber nicht, gell. :wink:
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: make_cms_type / Funktion in statische Methode

Beitrag von Faar » Di 22. Aug 2017, 09:24

Oldperl hat geschrieben:
Di 22. Aug 2017, 09:18
Faar hat geschrieben:
Di 22. Aug 2017, 09:11
Seit ich denken kann! 8)

Oh :shock:
:mrgreen: Die Frage, die mir dazu ganz spontan einfällt, stelle ich nun mal lieber nicht, gell. :wink:
:evil:
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: make_cms_type / Funktion in statische Methode

Beitrag von Oldperl » Di 22. Aug 2017, 09:43

Soderle, back to topic. 8)
Leo hat geschrieben:
Mo 21. Aug 2017, 17:28
Was mir noch aufgefallen ist, im Frontend arbeitet das Modul deutlich schneller. Die Ausgabe der Inhalte funktioniert dort ähnlich, deshalb wundert mich der Unterschied. Wahrscheinlich muss ich mir das Objekt cTypeGenerator in Ruhe anschauen. Soweit, wie ich die Funktion verstanden habe, holt es sich den entsprechenden CMS_Type und weißt Ihm den Content zu.
Ähm, das liegt einfach am Frontend-Caching. Wenn Du dieses in der Konfig abschaltest und die Seite(n) bei jedem Aufruf neu erstellen lässt, wird das Frontend sicherlich genauso lahm wie das Backend. Contenido 4.9 frisst, mit seiner Verschachtelung von Klassen bei der Seitengenerierung, einfach jede Menge Resourcen. Dies wird ab PHP 7.1 etwas besser, da dort, bei PHP, das interne OOP-Handling und Caching verbessert, und damit die Geschwindigkeit der Verarbeitung signifikant erhöht wurde, aber es "verschleiert" im Endeffekt nur die eigentliche Problematik.
Leo hat geschrieben:
Mo 21. Aug 2017, 17:28
Zu deiner letzten Anmerkung: Mittlerweile habe ich mein Leistungsspektrum deutlich erweitert müssen. Ich arbeite jetzt häufig mit Typo3 und Wordpress, obwohl das nicht immer ein Vergnügen ist. Die letzte Anfrage zu Contenido ist schon etwas her. Momentan pflege ich die vorhandenen Contenido-Version noch und führe, wenn gewollt ist, ein Upgrade durch. Ich möchte ja die Kunden nicht hängen lassen.
Kann ich sehr gut nachvollziehen. Auch ich bin breiter aufgestellt als früher. Sowohl Shopsysteme wie OXID oder modifiedShop, als auch Wordpress, gehören inzwischen zum festen Angebot. Zusätzlich mache ich noch ein wenig Serveradministration und Hosting, inklusive Domain-Reseller, hauptsächlich aber nur für meine Kunden.
Die meiste Zeit stecke ich momentan aber in meine 4.8er Fork ConLite und in das komplett überarbeitete Shop-Plugin des waShop. Es häufen sich gerade für die ConLite momentan die Anfragen, denn es gibt noch viele "alte" Contenidos da draußen, bei denen es sich entweder nicht lohnt, oder einfach der Aufwand/die Kosten zu hoch für ein Upgrade auf Contenido 4.9 ist/sind.
Und sobald ich nun den waShop auch als Demo fertig habe, werde ich diesen nehmen und meinen eigenen Module und Plugin Shop zu Contenido/ConLite online stellen.

Du siehst, ein Haufen Arbeit, und deshalb bin ich jetzt auch mal wieder raus hier. :wink:

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Antworten