Hi!
Überraschenderweise war str_replace() minimal schneller als nl2br() (bei gleichem Funktionsumfang):
Du misst Mist. Zum einen ist der Funktionsumfang
str_replace(array("\r\n", "\n\r", "\r", "\n"), array("<br />\r\n", "<br />\n\r", "<br />\r", "<br />\n"), $text)
und nicht wie bei dir nur
str_replace(array("\n", "\r"), "<br />\n", $text)
Es werden die Zeilenenden-Kombinationen berücksichtigt. Außerdem bleiben sie erhalten und werden nicht pauschal durch \n ausgetauscht. Mit der Langversion komme ich auf weiter auseinanderliegende Werte zugunsten von nl2br(). Mit welcher PHP-Version hast du gemessen? Der Funktionsumfang wurde mit Version 5.3 um den Parameter is_xhtml erweitert. Es kommt also auch noch mindestens eine Verzweigung dazu.
Zudem misst du nur die Laufzeit des Codes und berücksichtigst nicht die Parsezeit. Und selbst wenn es Unterschiede zwischen beiden Varianten gibt, sind diese so minimal, dass sie im praktischen Einsatz nicht ins Gewicht fallen. Schwerwiegender ist, dass du jedes Mal deutlich mehr notieren musst als ein "nl2br()". Wenn du eine Funktion dafür schreibst, wirst du deren Parse- und Ausführungszeit hinzubekommen und möglicherweise auch noch ein include. Alles in allem sehe ich mehr Nachteile, auf nl2br() zu verzichten, als die (angeblichen) Mikrosekunden Gewinn.
Im Gegensatz zu reinen Code-Teil-Laufzeiten, die mit microtime() gemessen werden, berücksichtigen Tools wie Apaches "ab" oder "ab2" den kompletten Request-Response-Zyklus. Der Unterschied ist der zwischen einer Labormessung und einer im tatsächlichen Einsatz.
Lo!