Hey Marc, guter Einwand! Ich hatte eigentlich nur den Code korrigiert, ohne überhaupt auf Performance zu achten. Trotzdem hatte mein Bauchgefühl mir gesagt, dass performance-mäßig fast alles besser als preg_replace() ist.
mgutt hat geschrieben:$url = preg_replace('/Test/', 'Test2', $url, 1);
Du darfst natürlich keine Variablen entfernen, die tatsächlich gebraucht werden. Die preg_replace() wird ja kaum mit Konstanten gefüttert. Der wesentliche Unterschied beider Varianten besteht also nicht in der Anzahl der Variablen, sondern in der Anzahl der Aufrufe (bzw. in der Komplexität des Codes dahinter).
Aus Interesse habe ich mal die Probe gemacht. Es tritt als Solist das Universalgenie preg_replace() gegen das Spezialisten-Trio strpos(), strlen(), substr_replace() an. Beide Teams dürfen 10.000.000x zeigen, wer schneller ist.
Code: Alles auswählen
<?php
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$url="Dies ist ein Test. Den Test sollte man immer machen.";
$suchmuster = "Test";
$ersetzung = "Test2";
$i=0;
$preg_start = microtime_float();
{
// *** PREG_REPLACE ***
for($i; $i<10000000; $i++) {
$preg_result = preg_replace("/{$suchmuster}/", $ersetzung, $url, 1);
}
}
$preg_end = microtime_float();
$i=0;
$substr_start = microtime_float();
{
// *** SUBSTR_REPLACE ***
for($i; $i<10000000; $i++) {
$start = strpos($url, $suchmuster);
$length = strlen($suchmuster);
$substr_result = substr_replace($url, $ersetzung, $start, $length);
}
}
$substr_end = microtime_float();
echo "PREG: {$preg_result} (".round($preg_end - $preg_start, 2)."s)<br>";
echo "SUBSTR: {$substr_result} (".round($substr_end - $substr_start, 2)."s)<br>";
Ausgabe:
PREG: Dies ist ein Test2. Den Test sollte man immer machen. (17.82s)
SUBSTR: Dies ist ein Test2. Den Test sollte man immer machen. (11.43s)
Fazit:
Die PREG-Variante ist gut 50 Prozent langsamer!