Optimierung durch Zerlegen von Strings mit explode()

Soll ein String anhand eines Teilstrings zerlegt und die einzelnen Teilstücke in einem Array gespeichert werden, sind die gängigsten verwendeten PHP-Funktionen split(), preg_split() und explode(). Da split() und preg_split() im Gegensatz zu explode() mit regulären Ausdrücken arbeiten, ist zu erwarten, dass explode() die schnellste Variante ist.
Das Beispiel-Script mit split() ist nur der Vollständigkeit halber aufgeführt. Seit PHP Version 5.3 gilt split() als veraltet und hat in PHP-Scripten schon lange nichts mehr zu suchen.

String mit 10 Zeichen zerlegen mit split()

Code:

<?php
$teilstring = "f";
$gesamtstring = "abcdefghijk";
for ($i = 0;$i < 10000;$i++) {
    $test = split($teilstring, $gesamtstring);
}
?>

Erläuterung:
Der String abcdefghijk wird anhand des Delimiters f in zwei Teile zerlegt. Das Zerlegen erfolgt mit split() innerhalb einer Schleife mit 10.000 Durchläufen.

String mit 10 Zeichen zerlegen mit preg_split()

Code:

<?php
$teilstring = "f";
$gesamtstring = "abcdefghijk";
for ($i = 0;$i < 10000;$i++) {
    $test = preg_split("/" . $teilstring . "/", $gesamtstring);
}
?>

Erläuterung:
Im zweiten Beispiel-Script erfolgt die Zerlegung des Strings mit preg_split(().

String mit 10 Zeichen zerlegen mit explode()

Code:

<?php
$teilstring = "f";
$gesamtstring = "abcdefghijk";
for ($i = 0;$i < 10000;$i++) {
    $test = explode($teilstring, $gesamtstring);
}
?>

Erläuterung:
Im dritten Beispiel-Code wird der String mit der PHP-Funktion explode() zerlegt.

Ergebnis

Requests per second (RPS)Time per Request (TPR)Vergleich
String mit 10 Zeichen zerlegen mit split()36.24 [#/sec] (mean)27.594 [ms] (mean)
51.6%
34.0%
String mit 10 Zeichen zerlegen mit preg_split()23.91 [#/sec] (mean)41.828 [ms] (mean)
String mit 10 Zeichen zerlegen mit explode()52.37 [#/sec] (mean)19.094 [ms] (mean)
119.0%
54.4%

Das split() verwendende Beispiel-Script spart 34% der Ausführzeit des Codes mit preg_split() während der PHP-Code mit explode() mehr als doppelt so schnell ausgeführt wurde wie der Code mit preg_split().

Fazit

Wenn es um das einfache Zerlegen einer Zeichenkette anhand eines Teilstrings ohne Verwendung regulärer Ausdrücke geht, ist explode() die beste Wahl weil mit großem Abstand schnellste Variante. preg_split() ist in unserem Beispiel deutlich langsamer als split(), weil an split() ein einfacher String, an preg_split() ein regulärer Ausdruck übergeben wurde. Die vorzuziehende Variante, wenn beim Zerlegen reguläre Ausdrücke verwendet oder zusätzliche Parameter übergeben werden sollen ist aus eingangs genannten Gründen in jedem Fall preg_split().

 

Anmerkung:
Die Tests wurden mit dem Apache HTTP server benchmarking tool ab auf einem im Februar 2017 nicht mehr dem Stand der Technik entsprechenden Server durchgeführt. Die RPS und TPR der getesteten PHP-Scripte sollten auf einem im Produktiv-Einsatz befindlichen Webserver deutlich besser sein.

Nächster Tipp: