Aunque la lógica me dice que un array asociativo funcionará mucho más rápido que un switch, dado que PHP es interpretado y no se a nivel interno como está implementado, pues qué mejor que un par de tests para probar.
Así que he creado un script que genera un numero de palabras aleatorias, y luego hace 100000 búsquedas. En un caso se mide cuanto tiempo tarda la parte del switch, y en el otro caso se mide cuanto tiempo tarda la parte del array asociativo.
Para los que no querais ejecutar el script, los resultados son los siguientes:
- Para 10 palabras dentro del switch/array asociativo y 100 mil iteraciones:
Ambos tardan lo mismo (el array un poco menos, pero casi casi ni se nota) - Para 100 palabras dentro del switch/array asociativo y 100 mil iteraciones:
El array asociativo tarda del orden de la mitad que el switch - Para 1000 palabras dentro del switch/array asociativo y 100 mil iteraciones:
El array asociativo es 10 veces más rápido que el switch
La conclusión es clara, si dentro de un switch hay un número considerable de entradas, y es un path crítico dentro de la aplicación, siempre será mejor adaptar el script para usar arrays asociativos.
Este script genera otro que es el que se utiliza para medir los tiempos.
$ php make_switch_vs_arrays.php > benchmark.php
$ php benchmark.php
English
20/02/2009 at 5:52 am Permalink
Lo suyo sería poner además el código que usaste para las pruebas…
20/02/2009 at 8:22 am Permalink
@ZydRick: si te fijas sólo tienes que bajarte este código y ejecutar estos dos comandos:
$ php make_switch_vs_arrays.php > benchmark.php
$ php benchmark.php
Ese segundo script es el que saca los resultados