PHP: Aktionen im Hintergrund ausführen

Hi,

ich habe heute etwas an der Performance meines Systems geschraubt.

Vor allem der integrierte PHP-Piwik-Tracker sorgte hier für messbar längere Ladezeiten meiner Seiten, da dieser natürlich erst eine Verbindung zum Piwik-Server aufbauen muss etc.

Meine Idee war also die HTML-Ausgaben an den Client zu schicken, danach die Verbindung zum Client zu trennen und anschließend erst den Seitenaufruf auf dem Server zu tracken, ohne dass der Client etwas davon mitbekommt.

Meine endgültige, funktionierende Lösung:

<?php

// Output-Buffering starten
ob_start();

// Seiteninhalt
echo '<html>... stuff ...</html>';

register_shutdown_function(function(){

	// Client kann Vorgang nicht abbrechen
	ignore_user_abort(true);
	
	// Verbindung schließen
	header('Connection: close');
	header('Content-Length: '.ob_get_length());
	
	// Alle Buffer löschen und ausgeben
	while(@ob_end_flush());
	
	// Daten an den Browser schicken
	flush();
	
	// Besuch tracken
	Piwik::track();
	
	// Session beenden
	session_write_close();
	
});

Geholfen hat mir: http://stackoverflow.com/questions/138374/close-a-connection-early