2009-08-01 21 views
5

Generalmente incluyo 1 archivo de funciones en el hader de mi sitio, ahora este sitio tiene bastante tráfico y solo me gusta hacer cada cosa lo mejor que puedo, entonces mi pregunta aquí es¿Cuál es un mejor rendimiento en PHP?

¿Es mejor? para incluir múltiples archivos de tipo de función más pequeños con solo el código que se necesita para esa página o realmente no importa cómo cargarlo todo como 1 archivo grande, mi archivo de funciones actual tiene todas las funciones para todo mi sitio, son aproximadamente 4,000 líneas de largo y se carga en cada carga de página en todo el sitio, ¿es malo?

Respuesta

5

Es difícil de decir. 4.000 líneas no es tan grande en el ámbito del análisis de archivos. En términos de administración de código, eso está empezando a ser difícil de manejar, pero es poco probable que vea una gran diferencia de rendimiento medible dividiéndolo en 2, 5 o 10 archivos, y que las páginas incluyan solo las pocas que necesitan (Es una mejor práctica de codificación, pero eso es un problema aparte). Su diferencia en la lectura de número de líneas frente a la cantidad de archivos que el analizador debe abrir no parece lo suficientemente grande como para garantizar nada significativo. Mi reacción inicial es que probablemente no sea un problema del que deba preocuparse.

En el lado opuesto de la moneda, trabajé en un proyecto de nivel empresarial donde algunas operaciones tenían un árbol include() que a menudo se extendía a cientos de archivos. La creación de perfiles de estas operaciones indicaba que el tiempo que tomaban las llamadas include() por sí solo compensaba 2-3 segundos de una operación de carga de 10 segundos (esto era PHP4).

+1

. Recuerde, sin embargo, que esas líneas 4k deben analizarse y ejecutarse para el acceso de _todas las páginas. A menos que tenga algún optimizador en ejecución que almacena en caché el bytecode compilado, pero la última vez que miré, esas cosas tienen un costo y, por lo tanto, no suelen instalarse a menos que pague por ello. – Joey

+1

Sí, eso es cierto. Pero también hay un costo para las búsquedas en disco para tratar con múltiples archivos. Si supone que lo divide en 10 archivos de 400 líneas cada uno, y en promedio incluye 4 de ellos en cada archivo, entonces tiene 1600 líneas de código y 4 archivos. La pregunta es si la reducción en el número de líneas analizadas es mayor que la sobrecarga de include() añadida.Postulo que la diferencia será extraodinariamente menor. La única manera de estar seguro, por supuesto, es compararlo. Sin embargo, en verdad, si estás en ese nivel de optimización, un caché de código de operación sería mucho mejor gastado. – zombat

+0

ok gracias por los comentarios, si alguna vez decido entrar en archivos más pequeños, como funciones de foros, funciones de blog, etc., ya que mi sitio tiene cientos de páginas que incluyen mi archivo de 1 función, podría simplemente poner en mi código que necesita determinar qué archivos cargar dentro de ese archivo de función incluido en lugar de editar un montón de archivos ¿no? Sé que no sería bonita, pero estaría bien? – JasonDavis

1

Generalmente, es mejor, en cuanto a administración de archivos, dividir las cosas en archivos más pequeños porque solo necesita cargar los archivos que realmente usa. Pero, a 4.000 líneas, probablemente no hará mucha diferencia.

me gustaría sugerir una solución similar a esta

function inc_lib($name) 
{ 
    include("/path/to/lib".$name.".lib.php"); 
} 

function inc_class($name) 
{ 
    include("/path/to/lib".$name.".class.php"); 
} 
+0

buena idea gracias – JasonDavis

1

Creo que sería mejor si pudiera dividir el archivo de funciones en componentes que sea apropiado para cada página; y llame para esos componentes en las páginas apropiadas. ¡Solo mis 2 centavos!

p/s: soy un aficionado de PHP y estoy intentando crear un sitio de PHP; No estoy usando ninguna función. Entonces, ¿puedes explicarme qué funciones necesitarías para un sitio?

+0

el sitio php.net tiene todas las funciones nativas de php, sin embargo, puede crear código que haga ciertas funciones/tareas y ponerlo en su propia función, que se puede invocar una y otra vez, por lo que No tiene que escribir electrónicamente ese mismo bloque de código cientos de veces – JasonDavis

1

En mi experiencia, tener un gran archivo de inclusión que se incluye en todas partes puede en realidad matar el rendimiento. Trabajé en un juego de navegador donde teníamos todas las reglas del juego como PHP generado dinámicamente (entre otros) y el archivo pesaba alrededor de 500 KiB. Definitivamente afectó el rendimiento y consideramos la posibilidad de generar una extensión PHP.

Sin embargo, como siempre, diría que debe hacer lo que está haciendo ahora hasta que sea un problema de rendimiento y luego optimizar según sea necesario.

3

Si puede instalar extensiones en su servidor, debería echar un vistazo a APC (see also).
Es gratis, por cierto ;-); pero debe ser administrador de su servidor para instalarlo; por lo general, no se proporciona en el alojamiento compartido ...

Es lo que se denomina "caché de código de operación".

Básicamente, cuando un script PHP se llama, suceden dos cosas:

  • el guión es "compilado" en códigos de operación
  • los códigos de operación se ejecutan

APC mantiene los códigos de operación en la RAM ; por lo tanto, no es necesario volver a compilar el archivo cada vez que se lo llama, y ​​eso es muy bueno tanto para la carga de la CPU como para el rendimiento.


Para responder a la pregunta un poco más:

  • 4.000 líneas no es que gran parte, al hablar de las actuaciones; Abra un par de archivos de cualquier aplicación grande/Framework, y obtendrá rápidamente un par de miles de líneas
  • a realmente importante Lo que debe tener en cuenta es la capacidad de mantenimiento: con qué será más fácil trabajar y Tu equipo ?
  • cargar muchos archivos pequeños puede implicar muchas llamadas al sistema, que son lentas; pero los que probablemente estarían en caché por el sistema operativo ... Así que probablemente no que relevante
  • Si usted está haciendo incluso 1 consulta de base de datos, ésta (incluyendo la red de ida y vuelta entre el servidor PHP y el servidor de base de datos) probablemente tomar más tiempo que el análisis de un par de miles de líneas ;-)
1

Si carga un archivo de línea 4000 y utiliza tal vez 1 función de 10 líneas, entonces sí, diría que es ineficiente. Incluso si usó muchas funciones de un conjunto de 1000 líneas, sigue siendo ineficiente.

Mi sugerencia sería agrupar funciones relacionadas y almacenarlas en archivos separados. De esta forma, si una página solo se ocupa de, por ejemplo, las funciones de la base de datos, puede cargar solo su archivo/biblioteca de funciones de la base de datos.

Otra razón para dividir las funciones es el mantenimiento. Si necesita cambiar una función, necesita encontrarla en su archivo de inclusión monalítico. También puede tener funciones que son muy, muy similares, pero que ni siquiera se dan cuenta. Ordenar funciones por lo que hacen le permite compararlas y deshacerse de cosas que no necesita o fusionar dos funciones en una función más de propósito general.

+0

puntos buenos gracias – JasonDavis

1

La mayoría de las veces, Disc IO es lo que matará a su servidor, por lo que creo que los archivos menores que obtenga del disco serán mejores. Además, si es posible instalar APC, el archivo se almacenará compilado en la memoria, lo que es una gran ganancia.

Cuestiones relacionadas