Ladezeiten-Optimierung

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
Post Reply
albert
Posts: 526
Joined: Sun Mar 07, 2010 8:01 pm
Location: Germany
Contact:

Re: Ladezeiten-Optimierung

Post by albert » Sat Sep 27, 2014 10:00 pm

meltemi wrote:Wenn ich Deine Bilder schon runtergeladen habe, möchte ich sie wenigstens auch sehen ;-)
klar, aber dafür gibts "weiterlesen".
meltemi wrote:Text für die Suchmaschine anzeigen und gleichzeitig vor Besuchern verstecken
wie meinst du "Text für die Suchmaschine anzeigen"? Meinst du z.B. Home oder Newsboxenseiten? Aber die Seiten sind ja nur nicht in der Navigation angezeigt, sie sind jederzeit per Eingabe erreichbar. Klar frag ich mich auch manchmal, was google davon hält (wenns zu viele sind). Wenn ich eine Seite wirklich verbergen will, entferne ich das Häkchen bei "Veröffentlichen". Die Seiten werden dann aber auch nicht von google gefunden.

meltemi
Posts: 177
Joined: Sat Feb 22, 2014 10:11 pm
Location: Franken (Deutschland)
Contact:

Re: Ladezeiten-Optimierung

Post by meltemi » Sat Sep 27, 2014 10:15 pm

albert wrote:wie meinst du "Text für die Suchmaschine anzeigen"?
Es gibt viele Leute, die machen das absichtlich, um Google zu täuschen. Die haben Text auf der Seite, den sie mit CSS vor den menschlichen Besuchern verstecken. Das verstößt gegen Googles Richtlinien.
albert wrote:Meinst du z.B. Home oder Newsboxenseiten?
Wie und woher ein CMS die Seite zusammenbastelt, kriegt Google nicht mit. Entscheidend ist, was hinten rauskommt.

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

Re: Ladezeiten-Optimierung

Post by cmb » Sun Sep 28, 2014 11:32 am

albert wrote:
meltemi wrote:Text für die Suchmaschine anzeigen und gleichzeitig vor Besuchern verstecken
wie meinst du "Text für die Suchmaschine anzeigen"? Meinst du z.B. Home oder Newsboxenseiten? Aber die Seiten sind ja nur nicht in der Navigation angezeigt, sie sind jederzeit per Eingabe erreichbar. Klar frag ich mich auch manchmal, was google davon hält (wenns zu viele sind). Wenn ich eine Seite wirklich verbergen will, entferne ich das Häkchen bei "Veröffentlichen". Die Seiten werden dann aber auch nicht von google gefunden.
Versteckte Seiten sind kein Problem bzgl. Suchmaschinen. Das kann man damit vergleichen, dass man HTML-Dateien auf dem Server hat, die nicht von der Website aus verlinkt sind -- im Zweifel weiß Google dann nichts von deren Existenz, und wenn es doch davon erfährt (z.B. weil jemand anderes auf diese Seiten verlinkt), dann ist das auch okay (man muss ja nicht alles was man anbietet, auch explizit anpreisen).
meltemi wrote:Es gibt viele Leute, die machen das absichtlich, um Google zu täuschen. Die haben Text auf der Seite, den sie mit CSS vor den menschlichen Besuchern verstecken. Das verstößt gegen Googles Richtlinien.
Auch hier braucht man eigentlich gar nicht an Suchmaschinen zu denken, sondern einfach nur zu berücksichtigen, dass CSS optional ist. Will man Besuchern, deren Browser kein CSS interpretiert, mehr Informationen bieten als anderen? I.d.R. wohl nicht. Es ist also meist sinnvoller, wenn man bereits das HTML verkürzt, das an den Client gesendet wird.
Christoph M. Becker – Plugins for CMSimple_XH

meltemi
Posts: 177
Joined: Sat Feb 22, 2014 10:11 pm
Location: Franken (Deutschland)
Contact:

Re: Ladezeiten-Optimierung

Post by meltemi » Mon Sep 29, 2014 12:16 am

cmb wrote:Versteckte Seiten sind kein Problem bzgl. Suchmaschinen.
Wenn eine versteckte Seite (CMSimple-Sprachgebrauch) auf einer anderen Seite, zB in deren Seitenleiste, angezeigt wird, und wenn zugleich ein Teil davon per CSS dem Besucher vorenthalten wird, aber für Google sichtbar ist, verstößt das gegen Googles Richtlinien. Punkt.

Auch für Webmaster ohne Täuschungsabsicht ist das Risiko groß, wegen sowas aus dem Google-Index zu fliegen. Darauf wollte ich hinweisen.

Zukünftig werde ich hier auf solche gut gemeinten Hinweise verzichten. Persönlich ist es mir nämlich völlig wurscht, wenn Google irgendwelche fremden Websites aus dem Index entfernt, egal ob BMW oder Bär.

meltemi
Posts: 177
Joined: Sat Feb 22, 2014 10:11 pm
Location: Franken (Deutschland)
Contact:

Re: Ladezeiten-Optimierung

Post by meltemi » Mon Sep 29, 2014 12:33 am

cmb wrote:
meltemi wrote:Der richtige Ort bei CMSimple(XH) wäre vermutlich die /index.php.
Ja. Oder auch zu Beginn von cmsimple/cms.php (dann muss man das bei mehrsprachigen Websites nicht in mehreren index.php Dateien machen). Allerdings muss man bedenken, dass diese Headerfelder dann für alle von CMSimple generierten Antworten gesendet werden (falls nicht ausdrücklich wieder überschrieben), und das sind nicht nur die HTML Seiten. Das kann erwünscht sein, muss aber nicht. Wollte man Headerfelder nur für die eigentlichen Seiten senden, dann sollte man header() am besten in template.htm aufrufen; und zwar, verrückter Weise ganz am Ende!
Ja, HTML-Seiteninhalte ändern sich öfter (oder oft eher?) als ein Favicon oder CSS-Regeln.

Kannst Du bitte mal eine (gekürzte) template.htm posten mit dem erforderlichen Beispiel-Code zur Cache-Steuerung verrückter Weise ganz am Ende? Mir geht's vor allem darum: Wo genau und wie ganz am Ende?

Für den PHP-Code selbst gibt's bei Selfphp ein Beispiel:
http://www.selfphp.de/praxisbuch/praxis ... 1&group=51

Ob dieses Code-Beispiel noch aktuell ist, weiß ich nicht. Und zumindest ein Druckfehler ist enthalten (fehlendes t).

Und wenn das dann getestet wurde und funktioniert, wäre es sinnvoll, an hervorgehobener Stelle darauf hinzuweisen, wie man für CMSimple(XH) die Cache-Steuerung für HTML-Seiteninhalte regelt, da es über mod_expires nicht klappt. Dann könnte das jeder Anwender nachbauen. Den Beispiel-Code dann in die mitgelieferten Standard-Templates aufzunehmen, könnte auch nicht schaden.


P.S.:
Sowohl die CMSimple_XH-Startseite als auch die CMSimple_4-Startseite haben dieses gähnend alte Verfallsdatum, müssen also immer neu vom Server geladen werden, auch wenn sich seit Wochen nichts geändert hat:

Code: Select all

Expires:·Thu,·19·Nov·1981·08:52:00·GMT(CR)(LF)
Das kann's doch wohl nicht sein :-(

Zum Vergleich: Für die Get-Simple-Startseite sehe ich gerade:

Code: Select all

Expires:·Mon,·29·Sep·2014·02:01:36·GMT(CR)(LF)
Die können das.

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

Re: Ladezeiten-Optimierung

Post by cmb » Mon Sep 29, 2014 1:07 pm

meltemi wrote:Wenn eine versteckte Seite (CMSimple-Sprachgebrauch) auf einer anderen Seite, zB in deren Seitenleiste, angezeigt wird, und wenn zugleich ein Teil davon per CSS dem Besucher vorenthalten wird, aber für Google sichtbar ist, verstößt das gegen Googles Richtlinien. Punkt.
Stimmt.
meltemi wrote:Auch für Webmaster ohne Täuschungsabsicht ist das Risiko groß, wegen sowas aus dem Google-Index zu fliegen. Darauf wollte ich hinweisen.

Zukünftig werde ich hier auf solche gut gemeinten Hinweise verzichten. Persönlich ist es mir nämlich völlig wurscht, wenn Google irgendwelche fremden Websites aus dem Index entfernt, egal ob BMW oder Bär.
Oh, ich glaube da liegt ein Missverständnis vor. Ich wollte nicht Deine Aussage korrigieren, dass es falsch sei Seiteninhalte per CSS unsichtbar zu machen (denn das stimmt ja), sondern wollte allgemein auf die Verwendung von versteckten Seiten eingehen. Mir schien (und scheint), dass Albert grundsätzliche Bedenken bzgl. versteckten Seiten hatte, da die ja nicht im Menü verlinkt werden. Und die wollte ich ausräumen.

Grundsätzlich sind mir gut gemeinte Hinweise immer willkommen, und ich denke, auch anderen geht das so.
meltemi wrote:Kannst Du bitte mal eine (gekürzte) template.htm posten mit dem erforderlichen Beispiel-Code zur Cache-Steuerung verrückter Weise ganz am Ende? Mir geht's vor allem darum: Wo genau und wie ganz am Ende?
Was nun wirklich konkret gemacht werden muss, ist mir noch immer nicht klar. Ich versuche im Lauf des Tages schlauer zu werden. Aber grundsätzlich meinte ich mit "ganz am Ende" folgendes:

Code: Select all

</body>
</html>
<?php 
// setzte die benötigten Header-Felder
?>

Warum ganz am Ende? Einfach deshalb, weil es sein könnte, dass ein Pluginaufruf im Template gezielt das Skript abbricht (siehe z.B. Sitemapper), und etwas anderes als das ausgefüllte Template ausliefert, oder gar unabsichtlich das Skript mit einem Fehler beendet wird (=> weiße Seite). In diesen Fällen sollten die Header im Zweifel besser nicht gesetzt werden.
meltemi wrote:Sowohl die CMSimple_XH-Startseite als auch die CMSimple_4-Startseite haben dieses gähnend alte Verfallsdatum, [...]
Stimmt -- da stimmt was nicht. Danke für den Hinweis; das schau ich mir gleich näher an.

PS: Die Cache-Control, Expires und Pragma Headerfelder werden gesendet, sobald eine Session gestartet wird (bei CMSimple_XH 1.6+ also immer). Was nun der Inhalt dieser Headerfelder ist, hängt zunächst einmal von der ini Direktive session.cache_limiter ab; die Voreinstellung ist "nocache", und das setzt folgende Header:

Code: Select all

Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

Hier wird also ganz gezielt das Caching unterbunden, was durchaus Sinn ergibt, da die Inhalte der Session ja durchaus auch das erzeugte HTML beinflussen können.

Man kann die Voreinstellung "nocache" nun leicht ändern (am einfachsten wohl mit der Funktion session_cache_limiter). Wenn ich auf "public" umstelle, dann funktioniert das Caching von selbst (die Dauer ergibt sich aus dem Wert von session.cache_expire; Standardwert "180" Minuten). Aber das gibt natürlich schon die ersten Probleme im Adminbereich: Änderung an der Seite wird gespeichert, und auch angezeigt; nach Wechsel in den View-Mode sieht man die Änderung aber nicht; Zurück in den Edit-Mode, wo dann die Änderung ebenfalls nicht mehr sichtbar ist, da nun ein GET-Request erfolgt, der auf den Cache zurück greift, während das Ergebnis des Speicherns (ein POST-Request) eben nicht aus dem Cache kommt.

Im Adminmodus erscheint das Caching also nicht sinnvoll. Das Caching nun für Frontend und Backend unterschiedlich zu handhaben, ist aber zumindest nicht ohne. Das Problem: um festzustellen, ob der User als Admin angemeldet ist, muss zunächst die Session gestartet werden, da dort diese Info verfügbar ist. Nach dem Start der Session kann aber session_cache_limiter() nicht mehr aufgerufen werden (bzw. der Aufruf bewirkt nichts mehr) -- da beißt sich also die Katze in den Schwanz.

Es bliebe noch die Möglichkeit am Ende des Templates die entsprechenden Headerfelder manuell zu setzen, falls der User nicht als Admin angemeldet ist, also etwa:

Code: Select all

</html>
<?php
if (!XH_ADM) {
    $expire = 3 * 60 * 60;
    $expires = gmdate('D, d M Y H:i:s', time() + $expire) . ' GMT';
    $mod = gmdate('D, d M Y H:i:s', filemtime($pth['file']['content']) + $expire) . ' GMT';
    header('Cache-Control: public, max-age=' . $expire);
    header('Expires: ' . $expires);
    header('Last-Modified: ' . $mod);
    header('Pragma:');
}
Allerdings würde ich nicht ausschließen, das ein solches Caching eben doch hier und da Probleme verursachen könnte; zumindest müsste man gründlichst testen, bevor man das auf einer echten Website einsetzt.
Christoph M. Becker – Plugins for CMSimple_XH

albert
Posts: 526
Joined: Sun Mar 07, 2010 8:01 pm
Location: Germany
Contact:

Re: Ladezeiten-Optimierung

Post by albert » Mon Sep 29, 2014 7:35 pm

@Christoph,
dein Code (am Ende fehlt wohl ein "?>") scheint gut zu funktionieren, und bringt auch was!
Habe die Zeit testweise auf 10*60*1 gestellt. Meine Seite laut Pingdom ohne html-Cache 2.30sec, mit 1.90sec, aber riesig ist der Unterschied bei meiner schneckenlahmen DSL-Verbindung: ohne 3-5sec, mit < 1sec bzw. quasi sofort !!! Ich bin begeistert, und meine Seitenbesucher,besonders auch Smartphone, werden es bestimmt auch sein, denn vor allem das mehrfache Switchen zwischen Shopartikel und Details hat bisher keine Freude gemacht.

Auch das "!XH_ADM" klappt bei mir einwandfrei. Änderungen sind im Vorschaumodus sofort sichtbar.
:) :) :)

@ meltemi,
ich danke dir ganz herzlich für deine Tipps, bitte mach das weiterhin, dafür ist ja dieses Forum! Das mit dem "unter CSS verstecken" war mir neu. Gut zu wissen!

PS: natürlich immer noch wichtig, auch den ersten Aufruf zu beschleunigen... weiss ich
Last edited by albert on Mon Sep 29, 2014 8:01 pm, edited 1 time in total.

albert
Posts: 526
Joined: Sun Mar 07, 2010 8:01 pm
Location: Germany
Contact:

Re: Ladezeiten-Optimierung

Post by albert » Mon Sep 29, 2014 7:58 pm

Ehre wem Ehre gebührt.
Auch dir, meltemi, meinen herzlichen Dank, dass du das html-Caching angestoßen und zur Lösung entscheidend beigetragen hast!
:) :) :)

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

Re: Ladezeiten-Optimierung

Post by cmb » Mon Sep 29, 2014 8:05 pm

albert wrote:dein Code (am Ende fehlt wohl ein "?>")
Das ist bei PHP immer optional. Viele empfehlen sogar es wegzulassen; bei XH und meinen Plugins ist es v.a. da, um die PEAR Coding Standards einzuhalten.
albert wrote:Meine Seite laut Pingdom ohne html-Cache 2.30sec, mit 1.90sec, aber riesig ist der Unterschied bei meiner schneckenlahmen DSL-Verbindung: ohne 3-5sec, mit < 1sec bzw. quasi sofort !!!
Ich kann betätigen, dass es nun deutlich schneller läuft, wenn eine Seite bereits im Cache ist -- auch bei DSL 30000.
albert wrote:Habe die Zeit testweise auf 3*60*1
Das wären nur 180 Sekunden -- vielleicht doch ein bisschen wenig. Wenn ich mir allerdings die Headerfelder ansehe, dann sieht es so aus, dass Du 600 Sekunden eingestellt hast.
albert wrote:Ich bin begeistert, und meine Seitenbesucher,besonders auch Smartphone, werden es bestimmt auch sein, denn vor allem das mehrfache Switchen zwischen Shopartikel und Details hat bisher keine Freude gemacht.
Aber denk auch an die Nachteile. Besucher die im Forum etwas posten, werden das vermutlich nur direkt nach dem Abschicken sehen können; rufen sie die Seite eine Weile später wieder auf, dürfte der Post fehlen.
Christoph M. Becker – Plugins for CMSimple_XH

albert
Posts: 526
Joined: Sun Mar 07, 2010 8:01 pm
Location: Germany
Contact:

Re: Ladezeiten-Optimierung

Post by albert » Mon Sep 29, 2014 9:12 pm

cmb wrote:sieht es so aus, dass Du 600 Sekunden eingestellt hast.
stimmt ich hatte es danach auf 10*60*1 gestellt. Das dürfte aber auch reichen, meine Seitenbesucher verweilen lt. crazystat 3-4 min. durchschnittlich und wenn länger ist ja auch nicht schlimm (vor allem wenn ich den ersten Aufruf noch schneller kriege... Aber das hin-und-her-Switchen ist allein hierdurch jetzt richtig gut!
cmb wrote:Besucher die im Forum etwas posten, werden das vermutlich nur direkt nach dem Abschicken sehen können; rufen sie die Seite eine Weile später wieder auf, dürfte der Post fehlen.
stimmt hatte ich nicht bedacht, is bissel komisch, aber nach 10 min. ist es ja wieder da

Post Reply