Rendimiento de los scripts PHP

¿Qué se ejecuta más rápido? ¿una sentencia de if anidados o un switch? ¿es mejor usar comillas simples o dobles para trabajar con cadenas? ¿foreach, for o while? Estas preguntas nos las hemos podido hacer, o no, alguna vez trabajando con PHP. Y la respuesta es que si hay diferencias entre usar un código u otro. Muy posiblemente si trabajamos con sites pequeños no notaremos diferencia, pero cuando se trabaja a mayor escala el ahorro en el rendimiento pasa a ser fundamental.

En la página www.phpbench.com hicieron distintas pruebas y sacaron conclusiones de qué instrucciones son más rápidas o tienen un mejor rendimiento al ejecutarse. La instrucción es la misma, pero la ejecución es más óptima.

Estas son algunas conclusiones que ya comentaron en otros blogs como sentidoweb.com:

  • Realizar un foreach es siempre más rápido, y si no recuperamos la clave del array mejor aún.
  • Un for es más rápido si no calculamos previamente en una variable el tamaño del array que recorremos, y que sizeof es más rapido que count.
  • Cuando vamos a asignar el valor de una posición de un array a una variable para tratar con ella, es conveniente hacerlo por referencia ($alias = &$aSingleDimArray[$i]).
  • No es más rápido crear un objeto como referencia ($obj =& new SomeClass();).
  • if es más rápido que switch/case, y ligeramente más rápido es usar == que ===.
  • Parece ser que el uso de comilla simple o doble en las últimas versiones se ha mejorado y no existe apenas diferencia.

Si quieres hacer tus propias pruebas con tu código puedes crear una pequeña clase para hacer el cálculo, como encontré en kickbill.com:

PHP:
  1. class benchmark{
  2.  
  3. private $start;
  4. private $end;
  5.  
  6. function __construct(){
  7. $this->start= microtime(true);
  8. }
  9.  
  10. function endBenchmark(){
  11. $this->end= microtime(true);
  12. }
  13.  
  14. function getBenchmark(){
  15. $time = ($this->end$this->start);
  16. return $time;
  17. }
  18. }
  19.  
  20. /**************************
  21. ** Código para la prueba **
  22. ***************************/
  23.  
  24. $test= new benchmark;
  25.  
  26. // tu código aquí
  27. usleep(2000000);
  28.  
  29. $test->endBenchmark();
  30.  
  31. echo \”Tiempo de la prueba: \”.$test->getBenchmark();

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>