12 Tips de optimización de PHP

No pude evitarlo, son bastante buenos los Tips (Gracias Alma por la tradución ;-)).

  • Si un método puede ser estático, decláralo estático. La velocidad mejorará por 4
  • Evita cosas como __get, __set, __autoload
  • require_once() es caro
  • Usa las rutas completas en los includes y requires, así se perderá menos tiempo resolviendo la ruta
  • Si necesitas saber el momento en el que el script comenzó a ejecutarse $_SERVER[’REQUEST_TIME’] es mejor que time()
  • Mira si puedes utilizar strncasecmp, strpbrk y stripos en lugar de expresiones regulares
  • preg_replace es más rápido que str_replace, pero strtr es 4 veces más rápido que preg_replace
  • Si una funcion, por ejemplo una que reemplace cadenas, acepta arrays y caractéres individuales como argumentos, y si tu lista de argumentos no es demasiado larga, considera escribir unos cuantos estados redundantes para el reemplazo, pasando un caracter de cada vez, en lugar de una línea de código que acepte arrays como argumentos de una búsqueda y reemplazo.
  • La supresión de errores con @ es muy lenta
  • $row[’id’] es 7 veces más rápido que $row[id]
  • Los mensajes de error son caros
  • No uses funciones dentro o para loop, como por ejemplo ($x=0; $x < count($array); $x). La función count() es llamada cada vez
No me queda de otra que corregir lo que siempre he mal programado :-D ...

Comentarios

2006-12-07 07:24:51
Rackon
Buenos días, según lo que lei es mejor:
"$array = mysql_fetch_array($select); while($array) { } ..."
que:
"while($array=mysql_fetch_array($select)) { } ..."
¿estoy en lo correcto?
2006-12-07 10:22:29
Victor
“$array = mysql_fetch_array($select); while($array) { } …”

En este caso no aplica, ya que esta función solo te tráe un elemento cada vez que es llamada, y supongo que siempre ha de ser diferente (Según los datos existenes en la base de datos), y si hicieras lo que comentas, estarías haciendo una comparación infinita con el primer arreglo devuelto, y sin brincar entre las posiciones del arreglo que debería devolver:

Y la segunda parte “while($array=mysql_fetch_array($select)) { } …” estaría recorriendo uno a uno los elementos del arreglo que se supone debería devolver.

Por un momento me fuí con la idea de lo que comentas es cierto, pero no estaba seguro completamente... jeje :P probé y confirmé.