PHP: switch vs array asociativo

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

Trackback URL

, , , ,

15 Comments on "PHP: switch vs array asociativo"

  1. ZydRick
    20/02/2009 at 5:52 am Permalink

    Lo suyo sería poner además el código que usaste para las pruebas…

  2. Pau Sanchez
    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

Trackbacks

  1. [...] Nota: Si se queire que sea aún más rápido es mejor usar arrays asociativos en vez de switches [...]

Hi Stranger, leave a comment:

ALLOWED XHTML TAGS:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Subscribe to Comments