Wir testen gerade in den letzten Zügen V2.01, da wir gerne auf die Reaktionen hier eingehen möchten.
Eigentlich wollte ich die Version auch schon heute abend einspielen - zu Problemen bin ich bislang auch nicht gekommen.
Dennoch möchte ich lieber noch 1-2 weitere Konstellationen testen, bevor wir es ausgeben.
Die Anpassungen sind aktuell:
Punkt 1: JavaScript wird nun in keiner Variante mehr verändert oder von unseren Skripten nachgeladen - nach wie vor ist die Fehlerquote hier zu hoch - wir verschieben die Skript so passend ohne die Reihenfolge oder Abläufe zu verändern und hindern trotzdem den Seitenaufbau nicht. Der Modus Defer ist dafür eigentlich die perfekte Variante, aber leider gibt es Skripte die mehr oder weniger "durch Glück" funktionieren. Das liegt daran, dass es folgende Konstellation geben kann (ein Beispiel mal simpel veranschaulicht):
- 1. JS-Datei wird asynchron geladen und verwendet Funktionen aus Datei 2
- 2. JS-Datei wird sofort geladen und ausgeführt
- Erst jetzt wird Datei 1 ausgeführt (Da die Ladezeit länger ist)
Das ist nicht der Grundgedanke vom asynchronen laden (und kann auch ohne Optimizer zu Fehlern führen je nach Internetverbindung).
Der Grundgedanke ist "es ist mir egal wann die Funktion ausgeführt wird, Sie ist von sich selbst abhängig, oder maximal von der Hauptbibliothek die an erster Stelle im Dokument steht - und genau deshalb braucht es nicht die Hohe Priorität, ich lade es asynchron damit die HTML Seite weiter arbeiten kann".
Punkt 2: Wir haben wie gewünscht ein kritisches CSS implementiert - nicht nach einzelnen Seiten sondern im generellen - somit bleibt die Konfiguration einfach, der Ballast niedrig, aber auch das ungewollte Springen wird verhindert. Generiert werden kann das kritische CSS per Klick - man muss 2 Parameter setzen, wobei in 90% der Fälle nur einer variabel ist. Gerne nehmen wir die gewünschten Template im Standard auf (aktuell EVO + Hypnos, EasyTemplate 360 schaue ich mir derzeit noch an und hier würden wir ebenfalls eine Vorkonfiguration liefern - wenn weitere gewünscht sind (und wir Zugang zu dem Template erhalten) - können wir die ebenfalls gerne mit einpflegen. Alternativ in der Doku mit aufnehmen).
Punkt 3: Man kann eigene Zusatzparameter global jeder Seite für den Head mitgeben (z.B. gezielt 1-2 CSS Dateien per link preload vorzuladen). Wer z.B. Dropper einsetzt hat ebenfalls ein paar mehr CSS Dateien dabei, die aber nicht kritisch sind. Über den Weg kann man seine CSS-Dateien aus "asset" vorladen und die restlichen nicht. Das automatische Bestimmen durch den Optimizer (der dann jede gefundene CSS Datei vorlädt) bleibt weiterhin verfügbar, ist aber im Standard auf "Nicht aktiv".
Punkt 4: Vollständige Kompabilität zu Mod-Pagespeed ohne das weitere Einstellungen in Mod-Pagespeed getroffen werden müssen.
Alles in allem habe ich mit der Lösung keine Probleme bisher finden können.
Das font-display: swap wirkt sich nicht besonders auf den PageSpeed Wert aus, allerdings auf Interaktionsrate und/oder Eingabelatenz und letztendlich auch auf den Wohlfühlfaktor (verhindert die kurzen leeren Texte, obwohl vorher schonmal Text vorhanden war) - hat allerdings auch viel mit weiteren Faktoren wie JavaScript zu tun.
Die Kernaussage die ich damit treffen wollte war: Vorher hat durch das Nachlagern Pagespeed die Schriften insgesamt (nicht nur mit dem Extra-Parameter) gar nicht erkannt. Daher hat es diese auch nicht bemängelt.
Werden die Schriften sauber nachgeladen und haben den Zusatz wie beschrieben gibt es an denen nichts mehr auszusetzen. Aber: Sie müssen geladen werden - und das ist ein Ballast.
In unseren (Release in ca. 2 Wochen) neuen Version des Templates Snackys haben wir uns daher z.B. auf ein Schriftdicke beschränkt und lassen andere Schriftdicken vom Browser rendern.
Sieht man häufig bereits am Dateinamen "Schrift x Regular", "Schrift X Light", ...
Schriften die als "Light" nicht einfach nur z.b. 30% dünner sind sondern an gewissen Ecken und Enden dann auch anders aussehen müssen mit jeder Dicke nachgeladen werden, das kann der Browser nicht errechnen (er würde es eben nur 30% dünner machen).
Diese Grunsatzfrage kann man aber mal in Frage stellen, denn: Eine Schrift ist mal schnell recht groß, sofern diese nicht optimiert ist. Eine Schrift hat je nach Typ mal schnell bis zu 300KB.
Lädt man also nun 3 Schriftdicken ist man im schlimmsten Fall bei 1MB - das wäre das Ziel wie groß eine Seite mit CSS+JS+HTML ist. Das steht einfach in keinem Verhältnis.
Und wer setzt seine Firmenschrift im Template ein? Oder ist es nicht meistens die vom Template mitgelieferte "schöne" Schrift? In zweiterem Fall kann hier definitiv einiges getan werden.
Im ersten Fall kann man schauen wo man seine Schrift einsetzen will. Nur im Logo+Slogan? Dann tut es auch eine passende SVG Grafik.
Diese grundlegende Entscheidung kann jedoch unser Plugin nicht abnehmen, das kann nur vom Templatehersteller passieren (auch die Entscheidung für mehrere Schriftdicken mag sinnvoll sein - sollte dann einfach fundiert getroffen werden).
@saw Das ist leider Horror:
HTML:
<link rel="preload" src="https://www.softairwelt.de/templates/Hypnos/bootstrap/fonts/glyphicons-halflings-regular.woff" as="font">
<link rel="preload" src="https://www.softairwelt.de/templates/Hypnos/bootstrap/fonts/glyphicons-halflings-regular.woff2" as="font">
<link rel="preload" src="https://www.softairwelt.de/templates/Hypnos/themes/base/font-awesome/webfonts/fa-brands-400.woff" as="font">
<link rel="preload" src="https://www.softairwelt.de/templates/Hypnos/themes/base/font-awesome/webfonts/fa-brands-400.woff2" as="font">
<link rel="preload" src="https://www.softairwelt.de/templates/Hypnos/themes/base/font-awesome/webfonts/fa-light-300.woff" as="font">
<link rel="preload" src="https://www.softairwelt.de/templates/Hypnos/themes/base/font-awesome/webfonts/fa-light-300.woff2" as="font">
<link rel="preload" src="https://www.softairwelt.de/templates/Hypnos/themes/base/font-awesome/webfonts/fa-regular-400.woff" as="font">
<link rel="preload" src="https://www.softairwelt.de/templates/Hypnos/themes/base/font-awesome/webfonts/fa-regular-400.woff2" as="font">
<link rel="preload" src="https://www.softairwelt.de/templates/Hypnos/themes/base/font-awesome/webfonts/fa-solid-900.woff" as="font">
<link rel="preload" src="https://www.softairwelt.de/templates/Hypnos/themes/base/font-awesome/webfonts/fa-solid-900.woff2" as="font">
Woff2 ist das neuere Format von Woff - der Browser lädt nur eines von beiden. Mit den Befehlen wird der Browser gezwungen beide zu laden. An Hand des Dateinamens kann er nicht erkennen ob es sinnlos ist, da es die gleiche Schrift ist. Der Name der Schriftart ist erst in der Datei zu finden, sodass er diese laden muss. Das ist ein unnötiger Ballast.
P.S.: In unseren Tests haben wir gemerkt - und ist auch logisch zu erklären - dass Preload das Ladeergebnis verschlechtern kann.
Warum ist das so? Mittels Link Preload wird dem Browser befohlen Dateien vorzuladen. Das macht er - und manche haben damit so zu tun, dass es die Seite verlangsamt.
Ist die Ressource nun gar nicht so wichtig, dann kostet das unnütze Zeit. Da wir nun CSS und JavaScript erst am Ende laden wird die Seite ja bereits angezeigt.
Kurzes Beispiel mit Preload (Musterdaten):
- SEite wird angefordert, Dauer 1s
- Schriften werden per Preload geladen: 2s
- HTML wird gerendet (Inhalt kommt ja erst nach dem Head-Tag also nach den Preloads): 1 s
- Seite wird nach 4s angezeigt
- CSS wird nachgeladen: Dauer 1s - Gesamtdauer: 5s
Kurzes Beispiel ohne Preload:
- Seite wird angefordert, Dauer 1s
- HTML wird gerendet: 1s
- Seite wird nach 2s angezeigt
- CSS wird geladen: 1s
- Schriften werden nachgeladen: 2s
- Gesamtdauer: 5s
Und wofür gibt es das Preload dann nun? Naja wer das CSS ganz oben hat (inkl. Schriften kann man ja auch in ein kritisches CSS packen) und auch noch inline braucht gleich die Schriften. Aber der Browser hat keine Preload Tag bekommen, sodass er selbst entscheidet was er wichtig findet (auch an Hand weitere HTML Strukturen) und lädt somit ggf. ein Bild vorher.
Kurzum: Preload ist ein mächtiges Tool - aber auch kein einfaches und sollte gezielt eingesetzt werden (daher auch unsere Anpassungen auf "Nicht Aktiv" im Standard des Plugins).
Und was macht Pagesspeed? Nutzt man Preload gehen die Werte hoch weil die erste Zeit bis zum Darstellen hochgeht, nimmt man Preload raus werden die Werte besser, aber er meckert an man solle doch die Schriften vorladen. Einfaches Problem: Das ist eine Maschine und weiß nicht was ihr mit der Seite vorhabt. Meine Empfehlung hier wäre: Die
eine wichtige Schrift vorzuladen.
Fazit: Durch das bessere Verarbeiten des Optimizer werden nun die Schriften (zu Recht) auch erkannt - das drückt jedoch den Score etwas.
Diese nun beabsichtigt nicht Pagespeed "zu zeigen" würde das Tool befriedigen - aber keinen eurer Besucher.