Benchmark: eliminación de elementos duplicados de un array en PHP
Posted In: PHP, Programación by Mauro ZadunaiskyTenemos el siguiente array
$r = array( 0 => 'verde', 1 => 'azul', 2 => 'verde', 3 => 'verde', 4 => 'amarillo', );
Y queremos eliminar los elementos duplicados, para lo cual tenemos dos opciones
1. array_values + array_unique
$r = array_values(array_unique($r));
2. array_keys + array_flip
$r = array_keys(array_flip($r));
¿Cuál es mejor?
Desde el punto de vista de legibilidad del código ambas opciones son válidas, ya que el comportamiento de cada una de las funciones utilizadas es bastante simple de comprender y se pueden consultar en el manual de PHP. Por lo tanto, lo único que puede determinar la conveniencia de una opción por sobre la otra es el tiempo de ejecución de cada una.
Para determinarlo, hemos realizado un benchmark. Estos son los resultados:
Opción 1 (array_values + array_unique)
-> Testing http://localhost/experimental/array_unique/1.php Total Requests made: 1000 Total Time elapsed: 14.009807348251 (seconds) Requests/Second: 71.379 req/sec Average request time: 0.014 seconds Standard deviation of average request time: 0.002 Longest/shortest request: 0.017 sec/0.004 sec
Opción 2 (array_keys + array_flip )
-> Testing http://localhost/experimental/array_unique/2.php Total Requests made: 1000 Total Time elapsed: 13.918713331223 (seconds) Requests/Second: 71.846 req/sec Average request time: 0.014 seconds Standard deviation of average request time: 0.003 Longest/shortest request: 0.017 sec/0.004 sec
Conclusión
La diferencia entre una opción y otra es prácticamente despreciable, así que la conclusión es que da lo mismo usar cualquiera.
Otra idea que podemos rescatar de esto es que realizar comparaciones entre funciones nativas de PHP realmente es un desperdicio de tiempo porque casi nunca se lograrán resultados significativos. Las verdaderas mejoras en la performance de una aplicación o website se consiguen atacando aquellas partes del código que mayores recursos consumen, como por ejemplo: consultas a base de datos, llamados excesivos a funciones recursivas, consumo de webservices, mala gestión de caché, etc.
