Pregunta

¿Qué puedo hacer para aumentar el rendimiento/velocidad de mi scripts PHP sin necesidad de instalar software en mis servidores?

¿Fue útil?

Solución

Perfil.Perfil.Perfil.No estoy seguro de si hay algo ahí fuera para PHP, pero debe ser simple para escribir una pequeña herramienta para insertar la información del perfil en el código.Usted querrá función de perfil de veces y consulta SQL veces.

Así que cuando usted tiene una función:

function foo($stuff) {
    ...
    return ...;
}

Me gustaría cambiar a:

function foo($stuff) {
    trace_push_fn('foo');
    ...
    trace_pop_fn('foo');
    return ...;
}

(Este es uno de esos casos donde varios retornos en función de convertirse en una obstaculización.)

Y SQL:

function bar($stuff) {
    trace_push_fn('bar');

    $query = ...;
    trace_push_sql($query);
    mysql_query($query);
    trace_pop_sql($query);

    trace_pop_fn('bar');
    return ...;
}

En el extremo, usted puede generar un seguimiento completo de la ejecución del programa y utilizar todo tipo de técnicas para identificar sus cuellos de botella.

Otros consejos

Uno razonables, técnica que puede ser fácilmente sacó fuera de la estantería de almacenamiento en caché.Una gran cantidad de tiempo tiende a ir en la generación de recursos para los clientes que son comunes entre las solicitudes (e incluso a través de los clientes);la eliminación de este tiempo de ejecución de trabajo puede conducir a un dramático aumento de velocidad.Usted puede deshacerse de recursos generados (o de recursos fragmento) en un archivo fuera de la web de árbol y, a continuación, vuélvalo a leer cuando sea necesario.Obviamente, algunos perfiles serán necesarias para asegurar que este está en realidad más rápido que el de la regeneración, obligando a la web del servidor de disco, con regularidad, puede ser perjudicial, por lo que el recurso realmente necesita para tener fuertes reutilización.

Usted también puede estar sorprendido de cuánto tiempo se gasta en el interior de mal escrito consultas de base de datos;el tiempo común de las consultas generadas y ver si se puede volver a escribirse.La cantidad de tiempo dedicado a la ejecución real de código PHP es en general bastante limitada, a menos que usted está utilizando algunos de los sub-algoritmos óptimos.

Ninguno de estos se limita a PHP, aunque algunos de los PHP "magicy" enfoques/funciones puede proteger a uno de una forma de pensar acerca de estas preocupaciones.Por ejemplo, recientemente he actualizado un script que estaba usando array_search utilizar una búsqueda binaria sobre un conjunto ordenado, y se ganó la espera exponencial de la aceleración.

Realmente considerar el uso de XDebug analizador:ayuda con la comprobación de cuánto una cierta función es la de ser ejecutado en contra de lo que habría esperado.

Yo trate de disminuir las instrucciones mientras se mejora la legibilidad del código mediante la sustitución de la lógica con la matriz de búsquedas cuando sea apropiado.Es lo que Jeff Atwood escribió en [El Mejor Código No es de Código][1].

  • También, evitar bucles dentro de otro bucle, y si anidadas/else.
  • Corto funciones.A veces una gran cantidad de código no necesita ser ejecutado cuando el resultado de valor ya está se conoce.
  • Pruebas innecesarias:

    if (count($array) === 0) return;

    también puede ser escrito como:

    si (!$matriz) return;

    Otra función llamada eliminado!

    [1]: http://www.codinghorror.com/blog/archives/000878.html"El Mejor Código No es de Código"

Usted puede optimizado el código con dos cosas básicas:

La optimización de PHP asociado de la biblioteca y el servidor

Ir a través de https://www.digitalocean.com/community/articles/how-to-optimize-apache-web-server-performance O

Puede utilizar la herramienta de perfilado como xhprof para ver qué parte del código se puede por optimizado y aquí está el enlace a continuación: http://michaelsanford.com/compiling-xhprof-for-php-5-4/

La optimización de su código mediante el uso del analizador de código y analizador de código

Usted necesita para instalar Netbeans en el fin de utilizar este plugin.Aquí están los pasos que tienes que seguir:

1) Abrir NetBeans, a continuación, seleccione la opción de menú barra de Herramientas > Plugin.Luego buscar el nombre del módulo de "phpcsmd" en el enchufe disponible en la ficha e instalarlo desde allí.

2) Ahora abrimos la terminal y estar allí como el super usuario escribiendo el comando "sudo su".

3) Instalar PEAR biblioteca (si no está instalado en su sistema mediante la ejecución de los siguientes comandos en el terminal

a) wget http://pear.php.net/go-pear.phar
b) php go-pear.phar

Como necesitamos esto para la instalación de más complementos.

4) a Continuación, ejecute el comando

"pear config-set auto_discover 1"

Esto se utiliza para configurar el auto descubrir el camino "true" para que los plug-ins necesarios.Así que se instale a la ubicación deseada de forma automática.

5) a Continuación, ejecute el siguiente comando para instalar PHP code sniffer.

"pear install --alldeps pear/PHP_CodeSniffer"

6) Ahora, para instalar el PHP Lío Detector ejecutando el siguiente comando

"pear install --alldeps phpmd/PHP_PMD"

Si recibe el error como "no válido en el nombre del paquete/paquete de archivos "phpmd/PHP_PMD"", mientras que la instalación de este módulo.Usted necesita usar este "canal pear-descubrir pear.phpmd.org" comando de deshacerse de este error.Después de este comando se puede ejecutar el comando de arriba de nuevo para instalar Lío detector.

7) Ahora, para instalar el PHP Dependen ejecutando el siguiente comando

"pear install --alldeps pdepend/PHP_Depend"

8) Ahora instale el PHP Copiar y Pegar Detector ejecutando el siguiente comando

"pear install --alldeps phpunit/phpcpd"

9) a Continuación, ejecute el comando

"pear config-set auto_discover 0"

Esto se utiliza para configurar el auto descubrir la ruta de "falso".

10) a Continuación, abra net beans y siga la ruta de acceso a Herramientas>Opciones>PHP>PHPCSMD

No hay ninguna solución mágica, y tratando de ofrecer soluciones genéricas que bien podría ser simplemente una pérdida de tiempo.

Dónde están los cuellos de botella?Por ejemplo, son su procesador de scripts de base de datos//intensivo de memoria?

Ha realizado ningún tipo de perfiles?

incluyendo archivos es lenta, y que requieren de ellos es incluso más lento.Si usas __autoload para la inclusión de cada clase, a continuación, que se suman.por ejemplo.

Siempre estoy un poco preocupado de intentar ser demasiado inteligente en términos de optimización de código, si los sacrificios código clairty.Si usted necesita para hacer que el código sea oscuro para hacerlo rápido, no sería más barato para actualizar hardwear en lugar de gastar su tiempo tratando de modificar el código?Los ciclos del procesador son más baratos que el programador de ciclos, después de todo.

Los que puedo pensar...

  • Invariantes de bucle son siempre una bueno para ver.

  • Escribir E_STRICT y E_NOTICE compatible con el código, especialmente si usted son el registro de errores.

  • Evitar el operador@.

  • Rutas absolutas para requiere y incluye.

  • Uso strpos, str_replace etc.en lugar de expresiones regulares siempre que sea posible.

Luego hay un montón de otros métodos que podrían funcionar, pero probablemente no dará mucho beneficio.

Cada vez que miro a los problemas de rendimiento, creo que la mejor cosa a hacer es cuánto tiempo sus páginas para llevar a cabo, y luego mirar a las más lentas.Cuando usted recibe estos indicadores, que a menudo puede mejorar el rendimiento en las más lentas por órdenes de magnitud, ya sea mediante la fijación de un lento consulta SQL o tal vez de apretar el código un poco.

Por supuesto, esto no requiere nuevo hardware o software especial, sólo un ojo crítico en el código existente.

Dicho esto, sólo funcionará durante tanto tiempo...si usted realmente está recibiendo suficiente tráfico para golpear los límites de su hardware, y/o hay algún código que es justo por sí lento y que realmente se requiere, usted tendrá que mirar otras posibilidades.

Yo soy el responsable de un gran sistema de presentación de informes y rastreamos el más lento de los informes guste.I fuego una clave única en el db cuando el informe se inicia y cuando termina me pueden determinar cuánto tiempo pasó.Estoy usando la base de datos porque de esa manera no se puede detectar cuando las páginas de tiempo de espera (que sucede mucho más de lo que me gustaría)

Siga algunos de los otros consejos de primera como de perfiles y tomar buenas decisiones de asignación de recursos, por ejemplo,el almacenamiento en caché.

También, tomar en cuenta el desempeño de los recursos del exterior como su base de datos.En MySQL se puede comprobar la slow query log por ejemplo.Además de asegurarse de que no el diseño de su base de datos una olvidarse de él.Optimización de las consultas (de nuevo para MySQL) contra los datos reales pueden pagar de los grandes.

Rasmus Lerdorf dio algunos buenos consejos en su reciente presentación "Simple es Duro"en FrOSCon '08.Si usted está usando un código de bytes de caché (y que realmente debería estar usando uno), incluir la ruta de acceso pierde mucho daño, por lo que requieren optimizar su/require_once.

Puede utilizar la herramienta de perfilado como xhprof para ver qué parte del código se puede por optimizado !

1) Usar la última versión de PHP

El núcleo del equipo está trabajando duro en mejorar el rendimiento de PHP en cada versión.

2) Utilizar un código de bytes de caché

A partir de PHP 5.5 un código de bytes de caché ha sido añadido en PHP llamado OPcache.El uso de OPcache se puede hacer una gran diferencia, especialmente desde PHP 7.Recibe mejoras en cada versión de PHP y que incluso podría llegar a un JIT aplicación en el futuro.

3) Perfiles de

Mientras que el desarrollo de perfiles le da una gran idea de lo que exactamente está sucediendo.Esto ayuda mucho a encontrar los cuellos de botella en el código.

Una de las herramientas más utilizadas es XHProf pero no está oficialmente soportado más y tiene problemas con el PHP >= 7.Una alternativa cuando se desea perfil de PHP >= 7 es Tideways que es un fork de XHProf.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top