Sunteți pe pagina 1din 3

Detalle de Trucos y Consejos de PHP

Nota: Recomiendo, a la hora de mirar estos consejos, contrastar la velocidad en la web The PHP Benchmark, debido a que alguno ha cambiado desde que se escribi el artculo original, por lo que es posible que en el futuro vuelvan a cambiar. 1. echo es ms rpido que print. 2. Envuelve tus strings en comillas simples () en lugar de comillas dobles () ya que es ms rpido, debido a que PHP busca variables dentro de y no en . Utiliza esto cuando no ests usando variables dentro del string. 3. Usa sprintf en lugar de variables contenidas en comillas dobles, es como 10 veces ms rpido. 4. Utiliza mltiples parametros (o apilados) con echo en lugar de concatenar strings.
5. Usa preclculos, fija el valor mximo para los bucles for antes y no en el bucle. En este ejemplo:
1 for ($x=0; $x < count($array); $x)

se llama a la funcin count() cada vez. En su lugar, utiliza $max=count($array) antes de que empiece el bucle for. 6. Desdefine (unset) o pon a null las variables para liberar memoria, especialmente los arrays grandes. 7. Evita las funciones mgicas como __get, __set o __autoload. 8. Utiliza require() en lugar de require_once() cuando sea posible. 9. Utiliza rutas completas en includes y requires, se invierte menos tiempo resolviendo las rutas del Sistema Operativo. 10. require() e include() son completamente idnticos, excepto que require() paraliza la aplicacin si no encuentra el fichero. En cuanto a rendimiento, hay muy poca diferencia. 11. Desde PHP5, la hora en que el script empieza a ejecutarse se puede encontrar en $_SERVER['REQUEST_TIME'], utiliza esto en lugar de time() o microtime(). 12. En cuanto a expresiones regulares, PCRE es ms rpido que EREG, pero intenta siempre usar en su lugar funciones nativas ms rpidas, como por ejemplo strncasecmp, strpbrk y stripos. 13. Cuando manipules XML (parsing with XML) en PHP, prueba xml2array, el cual hace uso de las funciones XML de PHP. Para HTML puedes probar DOM Document para PHP5 o DOM XML en PHP4 14. str_replace es ms rpido que preg_replace. str_replace es mejor en general, sin embargo, strtr a veces es ms rpido con strings ms largos. Normalmente, utilizando array() dentro de str_replace es ms rpido que usar mltiples str_replace. 15. Realizar declaraciones con else if es ms rpido que hacerlas con select, tambin conocidas como switch case. 16. Suprimir los errores con @ es muy lento. 17. Para reducir el ancho de banda utilizado, en Apache v2 pon a on mod_deflate, en Apache v1 prueba con mod_gzip. 18. Cierra las conexiones a la base de datos cuando hayas terminado con ellas. 19. $fila['id'] es 7 veces ms rpido que $fila[id], porque si no pones las comillas tiene que adivinar a que ndice te refieres, suponiendo que no te refirieras a una constante. 20. Utiliza las etiquetas <?php ?> cuando declares php, ya que los otros modos estn depreciados, incluyendo las etiquetas cortas (short tags).

21. Utiliza cdigo estrcto, evitando suprimir los errores, avisos y advertencias, de este modo se consigue cdigo ms limpio y menos gastos generales de recursos. Considera tener error_reporting(E_ALL) siempre en on. 22. Los scripts de PHP se sirven entre 2 y 10 veces ms lentos por Apache httpd que una pgina esttica. Intenta utilizar pginas estticas en lugar de scripts del lado del servidor. 23. Los scripts de PHP (excepto los cacheados), son compilados al vuelo cada vez que los llamas. Instala un producto de cacheado de PHP (como memcached, eAccelerator o Turck MMCache), ya que normalmente aumenta el rendimiento entre 25-100%, eliminando los tiempos de compilacin. Incluso puedes instalar eAccelerator en cPanel utilizando EasyApache3. 24. Una alternativa a las tcnicas de cacheado cuando tienes pginas que no cambian muy a menudo, es cachear la salida HTML de tus pginas PHP. Para ello, prueba con Smarty o Cache Lite. Usa isset en lugar de strlen cuando sea posible. Ejemplo:
1 2 3 4 5 6 7 if (strlen($foo) < 5) { echo "Foo es muy corto"; } //contra if (!isset($foo{5})) { echo "Foo es muy corto"; }

25. ++$i es ms rpido que $i++, por lo que utiliza el pre-incremento cuando sea posible. 26. Haz uso de las innumerables funciones predefinidas de PHP, no intentes construir unas propias que sean sumamente ms rpidas que las nativas; Si tienes mucho tiempo y funciones que estn consumiendo los recursos, considera escribirlas como extensiones o mdulos de C. 27. Analiza el rendimiento de tu cdigo. Un analizador del rendimiento (profiler) te mostrar qu partes de tu cdigo consumen cuanto tiempo. El debugger XDebug ya tiene un analizador. Este anlisis te ensear los cuellos de botella en un resumen. 28. Documenta tu cdigo. 29. Aprende las diferencias entre buen y mal cdigo. 30. Atente a los estndares de cmo escribir el cdigo, esto te har a t ms fcil entender el cdigo de los dems, y otras personas podrn entender el tuyo. 31. Separa cdigo, contenido y presentacin: mantn tu cdigo PHP separado del HTML. 32. No te compliques utlizando sistemas de plantillas complejos, como Smarty. Usa el que ya est incluido en PHP, mira ob_get_contents y extract y simplemente saca los datos de tu base de datos. 33. Nunca confies en variables que vienen del lado del usuario (como las que vienen de $_POST). Utiliza mysql_real_escape_string cuando utilices mysql, y htmlspecialchars cuando se muestren como HTML. (N.T.: es mejor utilizar PDO para la base de datos) 34. Por razones de seguridad, nunca tengas nada que pueda exponer informacin acerca de directorios, extensiones y configuracin, como por ejemplo display_errors o phpinfo() en tu webroot (directorio raz, donde est el index.html o index.php inicial) 35. Pon a off register_globals (Por alguna razn est desactivado por defecto!). Ningn script en produccin debera necesitar esto activado, ya que es un riesgo para la seguridad. Arregla cualquier script que lo necesite activado, y arregla cualquier script que lo necesite desactivado utilizando unregister_globals(). Hazlo ahora, ya que en PHP6 se eliminar.

36. Evita utilizar texto plano cuando almacenes y evales contraseas para evitar exponerlas. En su lugar utiliza hash, como un hash md5 (N.T.: es mejor utilizar CUALQUIER otro hash, como SHA512). 37. Usa ip2long() y long2ip() para almacenar direcciones IP como enteros en lugar de como strings. 38. Puedes evitar reinventar la rueda utilizando el proyecto PEAR, el cual ofrece cdigo existente de un estndard alto. 39. Cuando utilices header(Location:.$url); recuerda poner a continuacin die(); debido a que si no lo haces, el script continua ejecutndose incluso aunque la localizacin haya cambiado o evita usar todo ello junto cuando sea posible. 40. En POO (Programacin Orientada a Objetod), si un mtodo puede ser esttico, declralo esttico. La mejora en velocidad es por un factor de 4. 41. Incrementar una variable local en un mtodo de POO es lo ms rpido. Prcticamente lo mismo que llamar a una variable local en una funcin, e incrementar una variable global es 2 veces ms lento que incrementar una variable local. 42. Incrementar una propiedad de un objeto (por ejemplo $this->prop++) es 3 veces menor que una variable local. 43. Incrementar una variable indefinida es 9-10 veces ms lento que una pre-inicializada. 44. Simplemente declarar una variable global sin utilizarla en una funcin ralentiza las cosas (aproximdamente la misma cantidad que incrementar una variable local). Lo que probablemente hace PHP es comprobar si la variable global existe. 45. La invocacin de mtodos parece ser independiente del nmero de mtodos definidos en la clase, porque he aadido ms de diez mtodos a una clase de prueba (antes y despus del mtodo de prueba) sin cambios en el rendimiento. 46. Los mtodos en las clases derivadas se ejecutan ms rpido que aquellos definidos en la clase base. 47. La llamada a una funcin con un parmetro y una funcin con un cuerpo vacio tarda ms o menos lo mismo que realizar 7-8 operaciones $localvar++. Una llamada similar a un mtodo es, por supuesto, cerca de 15 operaciones $localvar++. 48. No todo tiene porque ser POO, a menudo es mucho gasto, las llamadas a cada mtodo y objeto consumen mucha memoria. 49. Nunca confies en los datos del usuario, escapa los strings que usas en las sentencias SQL utilizando mysql_real_escape_string, en lugar de mysql_escape_string o addslashes. As mismo, ten en cuenta que si est activado magic_quotes_gpc, debers utilizar previamente stripslashes (N.T.: La primera parte se repite, y yo tambin, para SQL -> PDO. Sobre lo de magic_quotes_gpc es mejor desactivarlo ya que tiene muchos inconvenientes (rendimiento y seguridad principalmente). En PHP 5.3.0 se marc como obsoleto y en PHP 5.4.0 se ha eliminado). 50. Evita el problema de la inyeccin de la cabecera del email al utilizar la funcin PHP mail(). 51. Desdefine (unset) tus variables de la base de datos (como mnimo la contrasea), no deberas nece sitarlos despus de realizar la conexin a la base de datos. 52. RTFM! (Read The F*cking Manual! o Lee El J*dido Manual!) PHP ofrece un fantstico manual, posiblemente uno de los mejores ah fuera, lo que lo hace un lenguaje muy prctico, proveyendo de ejemplos funcionales y hablando en ingls comn. (N.T.: recomiendo la versin en espaol que tiene inicialmente, aunque algunas partes estn solo en ingls. As mismo, la gente que comenta aporta muchsimo cdigo til).

S-ar putea să vă placă și