Un espacio para los entusiastas del web

Cómo optimizar tus aplicaciones PHP

Publicado el 24 de Mayo, 2007

La optimización de aplicaciones PHP nos ayuda a desarrollar aplicaciones rápidas, pero que a la vez cuenten con calidad y eficiencia. Nuestros usuarios necesitan de aplicaciones que resuelvan los problemas en el menor tiempo posible.

Los sitios web necesitan ser rápidos, sin tomar en cuenta el tamaño del mismo. Es por ello que el principal objetivo al desarrollar una aplicación está en su optimización. En este artículo expondremos varios aspectos a tomar en cuenta para optimizar nuestras aplicaciones PHP.

Debemos tener en cuenta que si realizamos un buen diseño de nuestra ingeniería de software, nos ayudaría a escribir código con bajo costo. Llamamos bajo costo cuando nuestro código se ejecute rápidamente o este consuma menos recurso.

¿Qué es la Optimización de aplicaciones?

Cuando hablamos de optimizar nos referimos a que nuestras aplicaciones tengan un bajo costo, o sea, que se ejecuten con mayor rapidez pero que a la vez tenga calidad y eficiencia. El objetivo de optimizar las aplicaciones PHP es minimizar el código resolviendo el mismo problema.

¿Que necesitamos Optimizar?

  • Tamaño de nuestra aplicación
  • Consumo de memoria
  • La velocidad en que se ejecuta

A continuación veremos varias recomendaciones a seguir para lograr una mayor optimización de nuestras aplicaciones PHP:

  • Inicialmente se debe estudiar a fondo el lenguaje de programación PHP, debemos conocer correctamente sus funciones, para seleccionar la adecuada.
  • No utilizar variables Globales, ya que PHP tiene que comprobar si existen, es mejor no declararla de ese tipo si no es necesaria.
  • No mostrar código HTML dentro de código PHP.

Es mas rápido usar:

<strong><? echo “Maestros del Web”; ?></strong>
      en lugar de...
<? echo “<strong>Maestros del Web</strong>”; ?>

PHP debe también interpretar el código HTML que se ha introducido entre sus etiquetas. Tomemos en cuenta lo siguiente:

  • No declarar variables que no se van a utilizar. Estarían ocupando un espacio en memoria innecesario.
  • La función “requiere_once” es bastante lenta.
  • Es muy útil declarar como estáticas las variables que lo requieran.
  • Minimizar el tamaño de nuestro código. Es conveniente analizar profundamente la mejor forma de escribir el código sin utilizar vías muy complejas y que hacen muy extenso nuestro código.
  • Disminuir los accesos al disco. Se debe cargar a memoria la información y luego acceder al disco duro, esto tiene menos costo ya que se disminuyen el número de accesos al disco.
  • Los ciclos (también llamados como bucles) pueden provocar un alto consumo de nuestro CPU, haciendo lenta nuestra aplicación.
  • Es más rápido calcular el tamaño del arreglo antes del ciclo, sino cada vez que se ejecute el ciclo nuestra aplicación tendrá que calcular su tamaño.

Es mejor usar:

$entrada = array ("Azul", "Rojo", "Blanco", "Negro", "Amarillo");
    $cantidad = count($entrada);
    for ($i = 0; $i < $cantidad; $i++){
        echo $entrada[$i];
    }
en vez de ...
     $entrada = array ("Azul", "Rojo", "Blanco", "Negro", "Amarillo");
    for ($i = 0; $i < count($entrada); $i++){
        echo $entrada[$i];
    }

Otras cuestiones que debes tomar en cuenta son:

  • No suprimir errores con @, es muy lento.
  • La función rand es más lenta que mt_rand.
  • La función srand es más lenta que mt_srand.
  • La función getrandmax es más lenta que mt_getrandmax.
  • Utiliza pocos accesos a la base de datos. Al realizar una consulta selecciona solo los campos que necesites. No utilices “SELECT * FROM tabla” si no lo necesitas, utiliza “SELECT campo, campo FROM tabla”.
  • La programación orientada a pbjetos (POO) es muy útil, y mucho más cuando nuestra aplicación cuenta con gran cantidad de códigos, la POO nos permite obtener un mayor aprovechamiento reutilizando nuestro código.
  • Comprueba el tiempo que demora tu aplicación en cargar.
  • Realiza validaciones de formularios mediante javascript. No valides con PHP después de realizar un POST. El usuario tendría que esperar que se cargue nuevamente la web para que le valide el formulario.

Las aplicaciones PHP en general son rápidas. Pero es muy importante Optimizar nuestra aplicación utilizando las recomendaciones anteriores. PHP cuenta con un manual muy bueno, amplio, que nos muestra todas sus funciones.

El tema de la optimización de las aplicaciones PHP es extenso y este artículo solo da algunos datos que te orientarán en la aplicación. Por ello te recomiendo que realices otras lecturas sobre la temática.

Otras Lecturas

Lecturas recomendadas

Otros artículos relacionados

Califica esta nota:

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (13 votos, promedio: 3.38 de 5)
Loading ... Loading ...

Comentarios

  1. También es mas óptimo usar comillas simples (’) en lugar de comillas dobles (”) si no hay variables que expandir :)


  2. Rafa

    Buen artículo.
    Pero no estoy de acuerdo en que deba dejarse a javascript la validación de los formularios ya que puede estar deshabilitado, disminuyendo la usabilidad y accesibilidad de la web.
    Además, pueden ocurrir errores imprevistos por la suposición de que javascript controlará las entradas de los usuarios, siempre imprevisibles.
    Un saludo


  3. Robert

    Rafa: Te estan diciendo que es para evitar consumir recursos y aliviar la carga del servidor al ejecutar codigo PHP para validar un formulario ..


  4. David

    Buen artículo, sin embargo este punto es bastante discutible:

    “Realiza validaciones de formularios mediante javascript. No valides con PHP después de realizar un POST”…

    Seguir este consejo puede resultar contraproducente


  5. Si, es verdad que podemos encontrar navegadores con javascript deshabilitado, es mejor validar del lado del cliente primero, antes de realizar un metodo POST. Si no validamos con javascript, tendriamos que hacer esperar al usuario que recargue la pagina si hay error, sino ya seria al momento la validacion.


  6. Rafa

    Eso es, para el usuario es mucho más cómoda la validación del lado del cliente pero no creo que ésta deba sustituir a la del lado del servidor, sino complementarla.


  7. Coincido con David. La validación JS puede saltarse o manipularse y puedes recibir cualquier cosa en tu aplicación.

    Yo valido con JS lo que puedo, pero vuelvo a validar todo con PHP. La primera validación la uso para evitarle al usuario el envío de la página con campos vacíos o datos erróneos y que la vuelva a recibir por estos errores. Pero la validación fuerte y de la que me fío, está siempre en mis aplicaciones.

    Otra cosa a considerar es el tema de uso de constantes frentes a variables. Aquí les dejo un enlace a un artículo mío:

    http://pablo.enlapc.com/2006/06/08/comparativa-variables-constantes-y-arrays-en-php/

    Por otro lado, les dejo este artículo que está excelente:

    http://www.php.lt/benchmark/phpbench.php

    Hay cosas muy importantes para rescatar aquí.


  8. anonymous

    La validación con javascript no tiene sentido si queremos que nuetras aplicaciones sean seguras. Que pasa si el cliente modifica el codigo javascript?


  9. bueno, estamos hablando de utilizar javascript para validar formularios del lado del cliente, luego es logico realizar una validacion con PHP mediante el metodo POST para preveer que se modifique el javascript o que este este desactivado en el navegador.


  10. Si “require_once” es muy lenta… cual es la alternativa?? ¿require()?


  11. alvlin

    no es que haya alternativa, sino que deberías usarla lo mínimo posible.

    Por otro lado: la POO. Si bien ayuda a reutilizar código y todo eso (que al estudiar java me lo metieron en la cabeza casi que a la fuerza), hay que tener en cuenta que la POO no es tan eficiente.
    Si se busca eficiencia y rendimiento, no uses POO. Al menos no uses un montón de clases, división en capas, etc.

    Para muestra un botón: usando POO, si quiero modificar el valor de un atributo, tengo que usar una función (setAtributo), mientras que de otra forma accedo directamente.
    Si estamos hablando de usar comillas en vez de comillas dobles para ganar velocidad, tenemos que despedirnos de la POO. Sobretodo cuando suele implicar el uso de varios require() con el código de las clases que se van a usar.

    La POO no está pensada para la máxima eficiencia, sino para facilitarle la vida al programador.


  12. Muy bueno, gracias y coincido que no se le debe dejar a Javascript solamente la validacion, los ataques XSS y SQL Injections estan a la order del dia, y la validacion en Javascript cualquiera se la brinca.


  13. Alekz

    Buen artículo, agrego algo más a lo de las sentencias SQL: Intentar tomar lo más que se pueda (pero lo necesario obviamente) en una sola sentencia, porque existe la costumbre de hacer varias sentencias para diferentes tablas en la misma DB. Se puede separar la tabla de la que se requiere obtener información por medio del operador punto ( . ).

    Ej:

    Es mejor hacer:

    SELECT tabla1.campo1, tabla1.campo2, tabla2.campo3 FROM tabla1, tabla2..etc

    Que:

    SELECT * FROM tabla1

    y después

    SELECT * FROM tabla2

    Sé que es algo bastante básico en SQL pero como también se puede hacer de esa manera (cargando la memoria bestialmente) me parece justo mencionarlo para los que comienzan. (no digo que sea un experto, incluso tal vez me equivoqué en la sintaxis pero lo digo porque antes yo lo hacía así porque no sabía que se podía hacer de otra forma).

    Y otra cosa también: USAR CSS y decir NO a las tablas innecesarias para los diseños cargados, guardar un archivo .css en el cache del cliente te puede ayudar muchísimo a mejorar la velocidad de carga!


  14. Hola.
    Como bien apnta el articulo, el uso de @ para omitir errores consume recursos que podemos ahorrarnos.

    El uso de la @ es a veces imprescindible a la hora de desarrollar, pero a la hora de poner el sistema en produccion, lo mejor es quitar todas las @ y usar error_reporting(0), lo cual ademas, nos evitará que se muestre información que pueda ser comprometida para la seguridad.

    Respecto al tema de validar con javascript, yo siempre hago doble validación. La validacion javascript es muy comoda para el usuario, sobre todo usando el evento onBlur, lo cual percata al usuario del error conforme termina de escribir, pero como ya han comentado, esto es muy facil de ser evadido, por lo que siempre deberemos tener una segunda barrera, aunque, claro esta, consuma recursos.


  15. Es interesante su articulo, pero a mi me parece tonto que los navegadores se desactiven para javascript, de hecho por ahi en foros del web expuse mi pagina y no faltó el “observador” que porque puse un javascript que pedia el nombre del usuario para darle un saludo personalizado ya pensaba en desactivar javascript, que quieren?, que regresemos a la era de puro html, sin javascript y de paso sin php?.
    Tomaré en cuenta sus observaciones para optimizar mis codigos, gracias.


  16. La tarea mas ardua es pasar a productivo…


  17. validar cualquier formulario con el lenguaje de servidor es imprescindible, nunca confies en una validacion de javascript, si lo que te preocupa es la velocidad al tener que recargar la pagina, utiliza ajax


  18. Pablasso: ajax es en parte javascript… ¿Que validación ajax puede funcionar con javascript deshabilitado…?
    Por cierto, Las mejres validaciones son al menos dobles… también cuento esas validaciones parciales desde los eventos de los controles (change, blur, keyup…)

    ;-)


  19. Manuel, a los más paranoicos nos gusta cargas rápidas ;) yo he bloqueado la carga de google analytics y adsense en mi maquina, son innecesarios para mi navegación jejej


  20. pero, no es quitarle funcionalidad a una web?, creo que para mostrar paginas de solo informacion html puro esta muy bien, pero si queremos darle un plus debemos recurrir a javascript, el problema es que si la gente lo desactiva por la razón que sea creo que es como pegarle un tiro pues lo mas probable es que tampoco vean nada si la mayor parte del contenido se genera al vuelo con javascript.
    Hay alguna manera de saber si la gente tiene o no activado javascript para mostrarles en caso de desactivarlo otra web con solo html?


  21. Manuel, muchas web realizan este tipo de verificacion, un ejemplo de esto lo hace Google con Gmail y seguro que con mucho mas de sus servicios cuando no tenemos Javascript activado o cuando nuestra conexion esta muy lenta.


  22. Madian

    Pues bien, a mi me parece buen articulo, pero quisiera que me explicaran como es que se puede un usuario pasar la validación de jscript,
    de verdad saben como, o solo comentan lo comentado, yo no tengo idea de como hacer eso, y me interesa porque estoy desarrollando una pagina, no soy experto ni nada por el estilo. Sobre lo del require_once, porque no usan el include_once() o es lo mismo? :|


  23. Hola Madian, haz probado desactivar el javascript de tu navegador ? es muy probable que tu validacion no sea ejecutada.


  24. Madian

    Si, en efecto he desactivado el java script , y manejo esos casos, una forma de evitar que manden datos que uso es la siguiente: en el evento onsubmit del formulario, establezco return false; es decir que cualquier intento de enviar datos sin validar, por cualquier método, y un input de tipo button que en su evento onclick lanza la función que valida los campos, si todos los campos contienen información válida hace esto document.forms[item].submit(),eso es todo, de modo que si el usuario desactiva el java script, no se hace la validación, y menos el envío del formulario . Sé que no hay sitio 100% confiable en su seguridad, pero es una forma de evitar el paso de datos no deseados. Pero quisiera aclarar mi comentario anterior, allí hago referencia al comentario de que modifican el código java script en su PC, he ahí donde reside mi incógnita; y vuelvo a formular la misma cuestión ¿Alguien sabe cómo hacer eso? y me refiero con eso a como validar con código java script creado por cualquiera en su PC, validar un sitio en internet, y además que el sitio acepte ese código como propio. Siempre estoy en busca de debilidades en las páginas que programo, por eso es que di con este blog. Por el momento es todo, gracias por su espacio.


  25. Juan

    Validar con javascript?
    Evidentemente el autor no sabe de lo que habla. Que manera de meterle ideas equivocadas al novato.


  26. Hola Juan, siempre es util realizar una primera validacion con javascript del lado del cliente para validar que los datos en los formularios esten correctos y que el usuario no tenga que esperar a que se recargue la pagina. Comentanos tu punto de vista.



  27. nere

    vale…
    pero como se cambian las variables globales por unas de aplicacion??
    gracias


  28. Hola nere, las variables de tipo globales debes definirlas en tu aplicacion, para definir variables puedes hacerlo por ejemplo:
    static $variable;


  29. sergio

    hola tengo una consulta cuando uno usa arrays … y le pone como indice algo asi “nombre_array_12345678″… y el siguiente pone “nombre_array_12345678″… en ves de ponerle 1, 2, 3… esto consume Significativamente mas recursos O solo los que necesita por la diferencia de tamaño enlos indices es decir … “nombre_array_12345678″ es obviamente mas grande que solo 1 jeje Repondanmeeeeeeeeeee


  30. Mauricio

    Hola aqui les mando un enlace que enriquecen este articulo:

    http://www.tufuncion.com/optimizar-script-php


  31. Alber

    Para el autor: por favor, validación en servidor y cliente. Nunca solo en cliente. Si desactivo javascript y te meto en contraseña un ataque de inyección para mysql la mitad de los que han leido este articulo se lo comerian. Ademas, no hace falta validar, sino evitar que te la cuelen. Tambien mucho cuidado con los get, que si envian comandos te pueden hasta borrar parte de los archivos que tienes en tu servidor.


  32. Hola Alber, todo esos problemas de inyeccion a traves de los metodos get y formularios, puedes surgir efecto en dependencia del metodo de Seguridad que emplees en el código de tu aplicacion. Existen varios formas para evitar estas inyecciones.


  33. Hola de nuevo.

    Por ahi lei que alguien preguntaba como detectar si el navegador no soporta javascript o el usuario lo ha desactivado.

    Esto es facil con la etiqueta , hace tiempo que no uso javascript y olvide como se usaba exactamente, pero sabiendo como se llama, en google no tendras ningun problema.

    Por otro lado, comentar y de paso publicitar el uso de la clase PEAR::DB2, que provee bastante buena seguridad frente a inyecciones SQL. (mirar metodos prepare() + execute() y query())

    Solo eso. Un saludo y buena suerte a todos amigos !


  34. Ala !! la etiqueta que decia arriba es “noscript” que la he puesto con sus respectivos < y > y el parseador de texto de la web se la ha cargado !!


  35. rocnick

    El documento esta bastante bueno, coincido que la validación del lado del cliente evita el envio de datos erroneos al servidor y la espera por parte del cliente. El cliente no tiene porque ver nuestro código utilizado en javascript, siempre existiendo la principal desventaja de inhabilitar el javascript en el browser.

    Saludos


Deja tu Comentario

Maestros del Web se reserva el derecho de moderación de los comentarios. Evita utilizar palabras soeces, ataques directos, descalificativos, insultos, de lo contrario tu comentario será eliminado.


Sobre el Autor

Damián Pérez Valdés

Damián Pérez Valdés
Webmaster, Administrador de Sistemas, con experiencia en desarrollo web y de aplicaciones.

Más artículos de Damián Pérez Valdés

Las Notas en tu correo


Acerca de

Maestros del Web nace cuando intentamos traducir Webmaster al Español. Nacimos orientados al diseño y desarrollo web. Hoy somos un espacio de apoyo para los entusiastas que participan en proyectos en la red.
Leer más de Maestros del Web