2010-08-06 8 views
5

¿Cuál es la mejor práctica para el ajuste del rendimiento de scripts?¿Reduce el número de incluye/requiere aumentar el rendimiento?

¿Éste?

require_once("db.php"); 

if (!is_cached()) { 
    require_once("somefile.php"); 
    require_once("somefile2.php"); 
    //do something 
} else { 
    //display something 
} 

¿O este uno?

require_once("db.php"); 
require_once("somefile.php"); 
require_once("somefile2.php"); 

if (!is_cached()) { 
    //do something 
} else { 
    //display something 
} 

¿Merece la pena incluirlo en estructuras de control de flujo o no?

Gracias

Respuesta

2

Sí, aumentará el rendimiento y, contrariamente a lo que otros dijeron, el impacto puede no ser despreciable.

Cuando incluye/requiere archivos, PHP comprobará todos los include_paths definidos hasta que encuentre el archivo o no haya nada más que verificar. Dependiendo de la cantidad de pathes de inclusión y la cantidad de archivos que se incluirán, esto tendrá un serio impacto en su aplicación, especialmente cuando se incluyen todos y cada uno de los archivos por adelantado. Lazy incluyendo (como en el primer ejemplo) o - incluso mejor - using the Autoloader is advisable.

leer relacionados que se ocupa de esto en más detalles:

* El consejo dado hay aplicable a cualquier aplicación o marco

+0

Sí, ya estoy usando la carga automática en mis aplicaciones, pero esta aplicación no puede usar la carga automática porque tiene demasiadas clases de terceros que usan nombres de clases bastante extrañas. :( – Kirzilla

+0

@Kirzilla podría considerar configurar un autocargador de respaldo personalizado que tenga una lista de clases de archivos '(" ThirdPartyPieChartClass "=>" /tools/piecharts/index.php ")' etc., y cargue el archivo deseado, en lugar de incluirlos todos a la vez. –

+0

Lo siento, mi inglés no es muy bueno. Por lo que yo entiendo, quiere decir que tengo que hacer una lista de excepciones y luego hacer algo como 'if (isset ($ exceptions [$ classname ])) {require_once ($ exceptions [$ classname])} 'Y por supuesto antes de incluir/requerir el control si classname ya existe. – Kirzilla

1

sí, va a aumentar el rendimiento, pero es muy poco lo que no vale la pena.

2

Incluye y requiere están diseñados en parte para permitirle organizar su código y facilitar el mantenimiento de su software. Si bien técnicamente hay un impacto en el rendimiento para usar, incluye que es insignificante y más que compensado al aumentar la capacidad de mantenimiento de su software. Especialmente si usa un caché de código de operación. No me preocuparía por esto y lo atribuiría a una optimización prematura.

2

A veces puede valer la pena si los archivos requeridos son enormes y no hay ningún caché de código de bytes disponible.

El problema entonces, sin embargo, no es realmente el número de declaraciones include(), sino la cantidad de datos que se incluyen. Cuanto menos código no utilizado incluya en una solicitud, mejor. Un buen remedio para monolíticos incluye dividir el código base en otros más pequeños o, si su aplicación está orientada a objetos en gran medida, utilizando la función autoloading de PHP.

que he visto paquetes de alojamiento compartido, donde un-enredos monolítica incluye podría ahorrar hasta medio segundo - que es mucho .

Además, incluido código PHP se analiza y ocupa memoria, ya sea que se ejecute o no. Una estructura limpia con objetos delgados suele ser la forma óptima.

+0

Tengo eAccelerator habilitado en el servidor – Kirzilla

+0

@Kirzilla luego haré algunos perfiles para averiguar cuánto se puede ganar. –

0

El uso de rutas absolutas para incluir archivos aumentará significativamente el rendimiento. Pruebe usando Apache Benchmark para ver si no lo hace.

+0

Sí, por eso solo tengo un camino en i nclude_path – Kirzilla

Cuestiones relacionadas