P A G E S P E E D
- JavaScript- und CSS-Ressourcen, die das Rendering blockieren, in Inhalten "above the fold" (ohne Scrollen sichtbar) beseitigen
Sichtbare Inhalte priorisieren
Browser-Caching nutzen
Antwortzeit des Servers reduzieren
Bilder optimieren
CSS reduzieren
HTML reduzieren
JavaScript reduzieren
Komprimierung aktivieren
Zielseiten-Weiterleitungen vermeiden
Hintergrund : Am Anfang ist es eine im DSL-Paket enthaltene Inklusivdomain. Dann möchte man sich an PHP und MySQL versuchen, um mehr Dynamik in die homepage zu bekommen und gönnt sich ein kleines Webhosting Paket. Wer bei 1und1 vor dem Problem steht, dass man weder gzip noch mod_deflate in der .htaccess verwenden kann (wäre auch zu einfach), dem könnte wie folgt geholfen werden :
Lösung: php.ini, .htaccess und zlib (Änderungen mit Editor z.B.)
Schritt 1 :php.ini im Stammverzeichnis ändern oder neu erstellen
output_handler = Off
zlib.output_compression = On
zlib.output_compression_level=6
zlib.output_handler = ob_gzhandler
default_charset = UTF-8
Schritt 2 : .htaccess im Stammverzeichnis ändern oder neu erstellen
AddType x-mapp-php5.4 .php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*\.css) gzip.php?type=css&file=$1
RewriteRule ^(.*\.js) gzip.php?type=js&file=$1
RewriteRule ^(.*\.html) gzip.php?type=html&file=$1
</IfModule>
* mit dem Programm gzip.php werden alle css, js und html komprimiert
Schritt 3 :gzip.php im Stammverzeichnis erstellen
<?php
//prüfen ob zlib compression aktiviert
if(!ini_get('zlib.output_compression')){ die(); }
$allowed = array('css','js','html'); // array mit erlaubten Dateitypen füllen
//prüfen ob angeforderter Dateityp erlaubt
if(isset($_GET['file']) && isset($_GET['type']) && in_array(substr($_GET['file'],strrpos($_GET['file'],'.')+1), $allowed)){
$data = file_get_contents(dirname(__FILE__).'/'.$_GET['file']); // Abruf des Dateinhalts
$etag = '"'.md5($data).'"'; // Datei Etag generieren
header('Etag: '.$etag); // Ausgabe des Etag in den header
// je nach Datei Inhaltstyp in den header ausgeben
switch ($_GET['type']) {
case 'css':
header ("Content-Type: text/css");
break;
case 'js':
header ("Content-Type: text/javascript");
break;
case 'html':
header ("Content-Type: text/html");
break;
}
header('Cache-Control: max-age=29030400, public'); //cache-control header setzen
$offset = 60 * 60 * 24 * 365;
$expires = 'Expires: ' . gmdate('D, d M Y H:i:s',time() + $offset) . ' GMT'; //expires header auf 1 Jahr in der Zukunft
header($expires); // Ausgabe des expires header
//Etag prüfen und nur dann speichern, wenn nicht vorhanden oder geändert
if ($etag == $_SERVER['HTTP_IF_NONE_MATCH']) {
header('HTTP/1.1 304 Not Modified');
header('Content-Length: 0');
} else {
echo $data;
}
}
?>
Schritt 4 : Überprüfung des headers, ob die Dateien nun tatsächlich komprimiert ausgeliefert werden.
HTTP Response Headers
HTTP/1.1 200 OK
Date Sat, 21 Jun 2014 02:05:37 GMT
Server Apache
Etag "e594071008f7d52c301b9d315771bb25"
Cache-Control max-age=29030400
Content-Encoding gzip
Vary Accept-Encoding
Keep-Alive timeout=2, max=200
Connection Keep-Alive
Transfer-Encoding chunked
Content-Type text/html; charset=UTF-8
... fertig. Das Original findet Ihr unter Enabling Gzip Compression of PHP, CSS, and JS Files Without mod_deflate:
Viel Spass damit!
Duplicate Content verhindern
Hintergrund : Nachdem man eine homepage erstellt hat, überprüft man diese auf Validität und Performance. Duplicate Content entsteht, wenn eine Seite beispielsweise über www.muster.de und muster.de erreicht werden kann. Das sind für Suchmaschinen zwei Paar Schuhe. Identischer Inhalt - mehrere URL's oder auch Links genannt.
Lösung : .htaccess, canonical-Link
Schritt 1 : canonical-Link im head Ihrer Seite setzen
<head>
<link rel="canonical" href="http://www.nameIhrerDomain.de/" /> </head>
Schritt 2 : .htaccess im Stammverzeichnis ändern oder neu erstellen
# BEGIN Dupkicate Content verhindern
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,QSA,L]
RewriteRule ^index\.(html?|php)$ http://%{HTTP_HOST}/ [R=301,QSA,L]
# END Dupkicate Content verhindern
Schritt 3 : Überprüfung auf duplicate content
... fertig. Mit diesen Tests werden eine Reihe von weiteren Fragen entstehen.
Historie dieser Page
Seit Dezember 2008 werden in unserem Dorf die Informationen nicht mehr getrommelt, sondern via Internet übertragen. Zumindest war es ab 2008 möglich zwischen zwei Anbietern zu wählen, was ich dann auch tat.
Meine erste Homepage entstand mit Tabellen und diese Unternehmung endete dann in der FeWo Scholle für einen alten und sehr guten Bekannten. Die Tabellenphase ist damit beendet.
Da Scholli nun im September 2014 seinen Anbieter wechseln wird, habe ich mich vorab mit CSS und Optimierungen beschäftigt. Ein Webhosting-Starter-Paket von 1und1 mit php und mySQL kamen hinzu. Seit nunmehr 3 Monaten kämpfe ich gegen die 404 und 500er. Derzeit läuft technisch alles recht stabil und somit kann ich an den content gehen.
Themen wie CDN und asynchron stelle ich vorerst nach hinten - aktuell sind gzip und cache.