Schnellere Website mit PHP im Hintergrund

Google mag schnelle Websites. Um so schneller die Website, um so besser ist das Ranking. Natürlich ist es auch für den Besucher gut, wenn die Website schnell reagiert. Und für den Betreiber einer Website erst recht, denn Amazon sagt, dass sie 1% mehr Umsatz machen für jede 100 ms, die eine Seite schneller ist.

Was ist einer der Faktoren für eine schnelle Website?

PHP im Hintergrund

Es gibt viele Faktoren, die die Geschwindigkeit einer Website beeinflussen. Eine wenig genützte Möglichkeit, ist es, Aufgaben, die nicht für die Darstellung der Seite notwendig sind, nicht sofort zu erledigen, sondern im Hintergrund später zu machen. Leider wird das mit PHP selten gemacht. Es gibt keine einfache PHP-Funktion dafür, aber es ist nicht schwer, wenn man weiß, wie es geht.

Für viele Aufgaben sinnvoll

Zu den Aufgaben, die man mit PHP im Hintergrund erledigen kann, gehören zum Beispiel:

  • Speichern in der Datenbank oder in einer Datei
  • E-Mail verschicken
  • Statistik Auswertungen
  • Protokollierung von Daten

So geht es

Die Aufgaben, die im Hintergrund erledigt werden sollen, werden in eine andere PHP-Datei ausgelagert, die mit einer URL aufgerufen werden kann.

Mit der Funktion „stream_socket_client“ kann eine asynchrone Verbindung aufgemacht werden. Das bedeutet die Verbindung zum Server wird aufgemacht, es wird aber keine Antwort abgewartet. Wie lange es dauert, um die Daten in der Datenbank zu speichern oder ein E-Mail zu verschicken ist also egal, das Script zum Erstellen der aktuellen Webseite wartet nicht auf die Antwort. Der Besucher sieht seine Seite somit wesentlich früher.

Der Aufruf einer Seite im Hintergrund mit PHP sieht so aus:


$protocol = 'ssl'; // ohne SSL: 'tcp'
$domain = 'mydomain';
$port = 443; // ohne SSL: 80
$path = '/mypath/myfile.php';
$timeout = 2;

$s = stream_socket_client("$protocol://$domain:$port", $errno, $errstr, $timeout, STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT);
if ($s) {
  $write = "GET $path HTTP/1.1\r\nHost: $domain\r\nAccept: */*\r\n\r\n";
  $return = fwrite($s, $write);
  echo "request sent";
}
else {
  echo "open socket failed, $errno $errstr";
}

 

Schreibe einen Kommentar