CnC: Cache&Compress für CMSimple_XH

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
Post Reply
Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

CnC: Cache&Compress für CMSimple_XH

Post by Holger » Wed Nov 01, 2017 12:00 am

CnC_XH ist ein neues Plugin, dass die Auslieferung einer CMSimple_XH - Seite beschleunigen kann.

Funktion:
CnC sucht in der fertig generierten Seite nach lokal verlinkten JavaScript und CSS-Dateien (Assets). Jedes "Asset" wird zunächst "minifiziert", wenn der Dateinamen nicht dem Schema *.min.* entspricht. Danach wird die optimierte Datei im Cache-Ordner des Plugins, mit dem Zeitstempel der Datei im Dateinamen, zwischengespeichert.
Von der "minifizierten" Version wird zusätzlich eine mit GZip komprimierte Variante dauerhaft gespeichert.
Die so modifizierten Dateien werden dann per PHP mit lange in die Zukunft gültigen Cache-Headern an den Browser gesendet. Beim erneuten Besuch werden die Dateien dann aus dem lokalen Cache des Browsers geladen, ansstatt erneut vom Server bezogen.
Bei Änderungen an den Dateien ändert sich auch der Zeitstempel und das Plugin verwirft die alte Variante und sendet stattdessen die neue Version an den Browser.

Zusätzlich kann CnC auch die Auslieferung der (dynamisch) von CMSimple_XH generierten Seite beschleunigen:
CnC aktiviert auf Wunsch die GZip-Komprimierung, was die Menge der zu übertragenden Daten erheblich verringert.
Zusätzlich ermöglicht es das Cachen der Seite: Aus dem Seiteninhalt wird eine eindeutige Kennung (Hash) generiert, der dem Browser als E-Tag beim Aufruf mit übermittelt wird.
Beim erneten Aufruf der Seite sendet der Browser das lokal gespeicherte E-Tag der Seite mit der Anfrage mit. Ist die Seite und somit das E-Tag noch identisch, lädt der Browser die lokal gespeicherte Version der Seite aus seinem Cache anstatt die gesamten Daten erneut vom Server zu laden. Hat sich der Seiteninhalt jedoch geändert, wird die aktuelle Seite analog ausgeliefert.

Installation:
wie üblich bei XH-Plugins den ZIP-Ordner entpacken und, unter Beibehaltung der Ordnerstruktur, auf den Server laden.
Der Ordner "/min" gehört in den Installationsordner von XH (gleiche Ebene wie /cmsimple oder /content). Der Rest gehört in den Plugin-Ordner (/plugins/cnc/*).

Voraussetzungen (siehe System-Prüfung):
  • mindestens XH 1.7beta1 (es wird ein Hook benötigt, den es erst ab dieser Version gibt)
  • PHP 5.4.0
  • einige Standard-PHP-Erweiterungen
  • der Cache-Ordner (/plugins/cnc/cache) muss für PHP beschreibbar sein
Mögliche Probleme:
  • Da die Assets durch PHP gesendet werden, ändern sich die Pfade und somit auch per Pfadangabe in Assets referenzierte Elemente. Das kann zum Beispiel in CSS-Dateien problematisch sein. Das Plugin versucht zwar die Pfade richtig anzupassen. Im Einzelfall kann es aber zu Problemen kommen. Sollten bei einzelnen Dateien Probleme auftreten, kann man sie in der Konfiguration des Plugins von der Bearbeitung ausschließen. Für CKEditor und TinyMCE ist das bereits in der Konfiguration eingetragen, da es in der Vergangenheit hier Probleme gab. Genaue Infos zu inkompatiblen Tools (auch zu den aktuellen Editor-Versionen sind willkommen).
  • Auch kann es sein, dass die Seite bei PHP-Fehlermeldungen nicht mehr angezeigt werden kann (Content_Encoding_Error). Für den Fall sollte temporär die (HTML-) GZip-Kompression in der Konfiguration abgeschaltet werden.
    Die Ausführung des Plugins lässt sich aber auch schnell und einfach per URL-Paramenter unterbinden. Eine Anfrage mit "&nocache" als URL-Parameter wird CnC kommentarlos deaktivieren und die Seite wird ausgeliefert, als wäre das Plugin nicht installiert.
  • Wenn offline gemachte Änderungen an JS- oder CSS-Dateien nicht erkannt werden liegt es vielleicht daran, dass die lokale Zeit hinter der Zeit auf dem Server eingestellt ist. Manche FTP-Programme ändern den Zeitstempel einer Datei beim Upload nicht. So kann es vorkommen, dass eine hochgeladene Datei scheinbar älter ist als die Version im serverseitigen Cache. In dem Fall kann man im Plugin den Cache-Ordner einfach leeren. Nachdem der browserseitige Cache geleert wurde (Strg+F5 sollte genügen), werden die Cache-Daten beim laden der Seite(n) neu generiert.
ToDo:
die aktuelle Version verringert die zu übertragende Datenmenge und implementiert Browser-Caching um eine CMSimple-Seite zu beschleunigen.
Was fehlt ist die Verringerung der Seitenanfragen am Server (Requests), was durch zusammenführen mehrerer Dateien zu einer Anfrage möglich ist. Zumindest teilweise ist das für eine kommende Version vorgesehen, sofern das Plugin erst einmal stabil funktioniert.
Cachen von Bildern etc. aus dem Userfiles-Ordner lässt sich per .htaccess auf Apache-Servern realisieren. Damit auch hier lange Gültigkeitsdaten verwendet werden können, könnte CnC an alle Verweise automatisch den Zeitstempel der Datei anhängen.
Ach ja, als Hilfe gibt es im Moment nur diesen Forums-Thread :oops: .

Download v 1.0beta1: http://cmsimple.holgerirmler.de/downloa ... latest.zip

Nach der Installation lässt sich mit den Entwicklertools des Browsers (F12) im Tab "Netzwerk" gut nachvollziehen wie das Caching funktioniert und wie viel Bandbreite durch die Kompression der Daten gespart wird.

Credits: CnC ist mein erstes vollständig mittels OOP realisiertes Plugin - ich bitte deshalb um etwas Nachsicht ;-). Als Vorlage hatte mir Christoph (cmb) - vielen Dank noch einmal dafür - sein Exchange_XH - Plugin ans Herz gelegt. Daher steht auch sein Name in den Quelldateien, die ich aus Exchange_XH übernommen habe.

mhz
Posts: 676
Joined: Tue Jun 25, 2013 8:46 pm
Location: Heusenstamm, Hessen
Contact:

Re: CnC: Cache&Compress für CMSimple_XH

Post by mhz » Wed Nov 01, 2017 1:31 am

DANKE für die tolle Idee
und die Programmiererei!
Michael Zajusch (mhz)-- Mein Tutorial für CMSimple_XH. Früher

mhz
Posts: 676
Joined: Tue Jun 25, 2013 8:46 pm
Location: Heusenstamm, Hessen
Contact:

Re: CnC: Cache&Compress für CMSimple_XH

Post by mhz » Wed Nov 01, 2017 1:33 am

Cachen von Bildern etc. aus dem Userfiles-Ordner lässt sich per .htaccess
Was wird denn in die .htaccess -Datei eingetragen?
Michael Zajusch (mhz)-- Mein Tutorial für CMSimple_XH. Früher

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: CnC: Cache&Compress für CMSimple_XH

Post by frase » Wed Nov 01, 2017 2:07 am

Hi Ho,
klingt alles sehr vielversprechend.
Hut ab - und Dank!
Logisch, dass man so auf die Schnelle noch kein Urteil abgeben kann. (Urteil will ich sowieso nicht abgeben ;-) )

Ein winziges Problemchen ist mir aber schon jetzt aufgefallen.
Kein Makel! Nur ein Hindernis für Code-Sniffer wie mich.

Untersuche ich ein Element mit der Konsole - um evtl. eine Style-Angabe zu finden - dann steht dort nur als Quelle "index.php" und eine Zeilennummer.
Hm.
Schon während ich das schreibe, kommt mir der Gedanke, dass das wahrscheinlich eher ein Vorteil ist.
Wenn ich an meinen eigenen Seiten entwickle, kann ich CnC ausschalten.
Will ich bei anderen "klauen", wird es ein bisschen aufwendiger - geht aber immer noch ;-)


Ha ha ha! Das Problem konnte ich auch gleich komplett streichen - ich lerne jeden Tag dazu.
Hält man in der Konsole die Mouse über index.php, wird ja doch die entsprechende Datei mit Pfad angezeigt
Das wusste ich bis eben nicht.

Also: Alles gut.
Im Moment sieht es so aus, als tut es, was es verspricht.
Last edited by frase on Wed Nov 01, 2017 2:33 am, edited 1 time in total.

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: CnC: Cache&Compress für CMSimple_XH

Post by frase » Wed Nov 01, 2017 2:31 am

Holger wrote:Mögliche Probleme:
Da die Assets durch PHP gesendet werden, ändern sich die Pfade und somit auch per Pfadangabe in Assets referenzierte Elemente. Das kann zum Beispiel in CSS-Dateien problematisch sein. Das Plugin versucht zwar die Pfade richtig anzupassen. Im Einzelfall kann es aber zu Problemen kommen. ...
Eben passiert mit der CSS-Datei von Syntaxhighlighter (1.0beta1).
In die Ignore-Liste aufgenommen -> alles OK.
Super.

lck
Posts: 2955
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: CnC: Cache&Compress für CMSimple_XH

Post by lck » Wed Nov 01, 2017 1:33 pm

Holger wrote:CnC_XH ist ein neues Plugin, dass die Auslieferung einer CMSimple_XH - Seite beschleunigen kann.
WOW!

Habe mal meine CMSimple_XH 1.7.1 Testinstallation mit Googles PageSpeed Insights getestet und bin begeistert:
Ergebnis ohne CnC:
Mobile = Poor 64 / 100
Desktop = Needs Work 76 / 100
This page is missing some common performance optimizations that may result in a slow user experience. Please investigate the recommendations below.

mit CnC:
Mobile = Needs Work 77 / 100
Desktop = Good 90 / 100
Great job! This page applies most performance best practices and should deliver a good user experience
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: CnC: Cache&Compress für CMSimple_XH

Post by frase » Wed Nov 01, 2017 1:44 pm

Ja, unglaublich.
Wenn jetzt noch (ich meine später) die Requests für Skripte und CSS durch Zusammenfassen der (einiger) Dateien hinzukommt, dann ist wirklich viel gewonnen.

Vieles kann aber der Template-Designer schon erreichen, wenn er Requests vermeidet und alles irgendwie zusammenfasst. (Negativ-Beispiel: fhs-op2. Das würde ich heute anders machen.)

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: CnC: Cache&Compress für CMSimple_XH

Post by cmb » Wed Nov 01, 2017 2:07 pm

Holger wrote:CnC_XH ist ein neues Plugin, dass die Auslieferung einer CMSimple_XH - Seite beschleunigen kann.
Danke!

Ich habe mir zunächst einmal das Netzwerk-Tab für meine XAMPP Installation genauer angeschaut, und musste feststellen, dass es eigentlich kaum einen Unterschied macht, ob CnC aktiviert ist oder nicht. Da wird so wie so extrem aggressiv gecache't. Dann mal mit Portable_XH ausprobiert, und da macht es wirklich den gewünschten/erhofften Unterschied. Daraufhin habe ich mir 3-magi.net und cmsimple.holger-irmler.de angeschaut, und beide Sites werden ebenfalls aggressiv gecache't. Hauptsächlich ausprobiert mit einem aktuellen Chrome, aber ein aktueller Firefox verhält sich wohl bezüglich des Caching gleich. Und ja, ganz offensichtlich hängt das vermutlich v.a. vom Server ab: XAMPP und cmsimple.holger-irmler.de senden E-Tag-Header, 3-magi.net Last-Modified, aber Portable_XH eben nichts dergleichen. Was mich allerdings wundert, ist, dass der Chrome anscheinend bei 3-magi.net gar nicht mehr nachfragt, ob die Datei aktualisiert wurde (das Netzwerk-Tab zeigt 200). Müsste man sich vielleicht mit einem Netzwerksniffer noch mal genauer anschauen.

Wenn ich mir Ludwigs Ergebnisse anschaue, hängt wohl wirklich viel von der Serverkonfiguration ab.
Holger wrote:Was fehlt ist die Verringerung der Seitenanfragen am Server (Requests), was durch zusammenführen mehrerer Dateien zu einer Anfrage möglich ist.
Das wäre schon wünschenswert, ist aber durch HTTP/2.0 eventuell gar nicht mehr wirklich wichtig.

Was vielleicht noch sehr interessant wäre, wäre die optionale Integration von Cache_XH (jedenfalls sinngemäß); das könnte zumindest für CMSimple_XH Sites bei denen sich nur selten was ändert interessant sein.
Christoph M. Becker – Plugins for CMSimple_XH

mhz
Posts: 676
Joined: Tue Jun 25, 2013 8:46 pm
Location: Heusenstamm, Hessen
Contact:

Re: CnC: Cache&Compress für CMSimple_XH

Post by mhz » Wed Nov 01, 2017 3:41 pm

Danke für den Link mit der Speed-Testseite!
Ich habe das gerade bei einer aktiven Homepage getestet.
ohne CnC:
Mobile = Poor 53 / 100
Desktop = Needs Work 67 / 100
mit CnC:
Mobile = Poor 54 / 100
Desktop = Needs Work 70 / 100
Mehrfach Cache geleert, es bleibt dabei.
Michael Zajusch (mhz)-- Mein Tutorial für CMSimple_XH. Früher

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: CnC: Cache&Compress für CMSimple_XH

Post by frase » Wed Nov 01, 2017 3:45 pm

Das liegt möglicherweise daran, dass das Meiste schon minifiziert ist ???

Post Reply