PHP 5.2+ lento al concatenar

Tras actualizar a PHP 5.3, he podido comprobar que ciertas aplicaciones funcionaban mucho más lentas. Una vez descartado que los problemas no estaban en el paso de ISAPI a FastCGI, he dado con la clave, que es la issue #46198.

Parece ser que si concatemanos asignado la cadena original, en la forma como:
$sCadena = $sCadena . 'Valor';

El resultado es tremendamente ineficiente. Según mis pruebas entre 3 y 30 veces más lento que haciéndolo así:
$sCadena .= 'Valor';

El argumento que aducen es que en el primer caso, la cadena debe ser copiada, mientras que en el segundo no. Personalmente, y aunque sigo siendo bastante entusiasta de PHP, lo encuentro intolerable.

La explicación dada es consistente si el comportamiento siempre hubiera sido así, pero es que concatenando como en el primer ejemplo sobre PHP 5.1, el rendimiento es igualmente bueno. Puedo comprender, que se hayan aplicado optimizaciones sobre la segunda variante, que lo hagan mucho más eficiente en nuevas versiones de PHP, pero no puedo enterder porque han cambiado una implementación a peor.

Como colofón, ciertas deficiencias en la 5.3, desde la ya mencionada ausencia de ISAPI, que según he visto era más eficiente que FastCGI, o los problemas con IPv6, son sin duda un paso para atrás.

Precisamente una de las claves de PHP era su rendimiento, que permitió imponerse en su día a Coldfusion y ASP (amén de su facilidad, capacidad de conexión a base de datos y portabilidad), pero lamentablemente, se ha ido quedando atrás respecto a la competencia.

Si a todo lo visto, le añadimos los múltiples retrasos en PHP 6, nos daremos cuenta de los problemas internos que debe de estar sufriendo el desarrollo.


PHP 5.2+ lento al concatenar

Deja un comentario