10
Mär
2011
admin

Die Standard PHP Library (SPL) - Die SplQueue Klasse

Ich bin mir ziemlich sicher, dass viele PHP Programmierer sie nicht nutzen (zumindest nicht bewusst) und das einige noch nicht mal wissen, dass es sie gibt. Ob das ausschließlich notorische Fortschrittsverweigerer sind sei mal dahin gestellt. Die Rede ist natürlich von der Standard PHP Library (SPL). In den gängigen und allseits bekannten PHP Tutorials wird sie meist nicht mal erwähnt. Dabei bietet uns die SPL viele hilfreiche Klassen und Funktionen, die uns das Leben manchmal sehr viel leichter und unseren Code um ein vielfaches performanter oder weniger speicherhungrig machen.

Als erstes Beispiel möchte ich die Klasse SplQueue vorstellen.

Hinweis
Bei einer Queue geht es um eine Datenstruktur, genauer gesagt, um eine Art Warteschlange, die eine beliebige Menge von Daten aufnehmen kann und nach dem FIFO Prinzip (First In – First Out) arbeitet. Das bedeutet, dass als erstes immer das Element heraus geholt wird, welches als erstes hineingelegt wurde.

Als Beispiel werden wir zunächst ein Array mit n Elementen anlegen und in einer Schleife die Elemente wieder heraus holen. Wir gehen dabei ebenfalls vom FIFO Prinzip aus, d.h., dass wir das erste Element zuerst holen und das zuletzt hineingelegte, als letztes.

// Die Anzahl der Elemente wird beim Aufruf über die Konsole angegeben
$elements = $argv[1];

$array = array();

// Array füllen
for($i = 0; $i < $elements; $i++) {
  $array[] = $i;
}

// Elemente wieder raus holen nach FIFO Prinzip
for($i = 0; $i < $elements; $i++) {
  array_shift($array);
}

Das gleiche Beispiel mit der SplQueue Klasse:

// Die Anzahl der Elemente wird beim Aufruf über die Konsole angegeben
$elements = $argv[1];

$array = new SplQueue;

// Queue füllen
for($i = 0; $i < $elements; $i++) {
  $array[] = $i;
}

// Elemente wieder raus holen nach FIFO Prinzip
for($i = 0; $i < $elements; $i++) {
  $array->dequeue();
}

Der Unterschied ist auf den ersten Blick sehr gering. Die beiden Beispiele unterscheiden sich nur durch das Anlegen des Arrays, bzw. die Instantiierung des Objektes und die Art und Weise, wie die Elemente aus dem Array, bzw. dem Objekt entfernt werden. Den Vorteil der SPL sehen wir, wenn wir die Ausführungszeit der beiden Beispiele messen und miteinander vergleichen.

Getestet wurde mit folgender Konfiguration:
splqueue-phpinfo_0.jpg

Für die Messung werden jeweils 30000 Elemente für das Array, bzw. das SplQueue Objekt genutzt. Als erstes nehmen wir uns unser Array mit der array_shift Funktion vor.
splqueue-array_0.jpg

Und nun die gleiche Anzahl an Elementen mit der SplQueue Klasse.
splqueue-object_0.jpg

Wie man sieht ist die Geschwindigkeit bei der SplQueue Klasse um ein vielfaches höher. Bei 10 oder 20 Elementen spielt das sicher keine große Rolle aber bei großen Datenmengen ist der Geschwindigkeitsvorteil enorm. Außerdem reduziert sich auch der Speicherverbrauch bei der Benutzung der SplQueue Klasse.

Braucht man also einen Speicher, der viele Elemente aufnehmen kann und der nach dem FIFO Prinzip arbeitet, ist man bei der SplQueue Klasse sehr gut aufgehoben.

Trackback-URL für diesen Beitrag

http://www.abouttheweb.de/trackback/644
X
Laden