2010-02-04 10 views
8

La pregunta podría hacer que algunas personas digan SI o NO definitivamente casi de inmediato, pero por favor lea ...¿Incluir archivos php innecesarios ralentizará el sitio web?

Tengo un sitio web simple donde hay 30 páginas de php (cada una tiene algún código de servidor php + HTML/CSS etc ...). Sin jerarquía complicada, nada. Solo 30 páginas.

También tengo un conjunto de archivos php puramente de fondo, los que tienen código para guardar cosas en la base de datos, hacer autenticación, enviar correos electrónicos, procesar pedidos y similares. Estos serán reutilizados por esas 30 páginas de contenido.

Tengo un archivo master php al que le envío un parámetro. Esto especifica cuál de esos 30 archivos es necesario e incluye la página de contenido apropiada. Pero cada uno de ellos puede requerir una cantidad variable de archivos back-end para ser incluidos. Por ejemplo, una página de contenido puede no requerir nada del back-end, mientras que otra podría necesitar el código de la base de datos, mientras que otra podría necesitar el e-mail, la base de datos y el código de autenticación, etc ...

Creo que cualquier página de back-end es requerido, se puede incluir en la página de contenido apropiada, pero un pequeño cambio en la ruta y tengo que editar decenas de archivos. Será demasiado engorroso comprobar que se solicita la página de contenido (tipo de conmutador) e incluir los archivos de fondo adecuados en el archivo maestro php. De nuevo, tengo que hacer muchos cambios si cambia una sola ruta.

Siendo perezoso, incluí TODOS los archivos back-end en el archivo maestro para que ninguna página de contenido pueda solicitar algo que no esté incluido.

Primera pregunta: ¿es esta una buena práctica? si lo hace alguien en absoluto.

En segundo lugar, ¿habrá algún problema de rendimiento o algún tipo de problema debido a que incluiré todos los archivos de fondo independientemente de si son necesarios?

EDITAR

el sitio web recibe en cualquier lugar entre los años 3000 - más de 4000 visitantes al día.

+0

puede responder fácilmente la segunda pregunta ejecutando algunas pruebas simples de rendimiento, como medir el tiempo de ejecución en las diferentes configuraciones ... – jochil

Respuesta

7

Debe comparar. Tiempo la ejecución de la misma página con diferentes incluye. Pero supongo que no hará mucha diferencia con 30 archivos.

Pero puede ahorrarse tiempo y simplemente habilitar APC en php.ini (es una extensión PECL, por lo que necesita install). Cacheará el contenido analizado de tus archivos, lo que acelerará las cosas de manera significativa.

BTW: No hay nada malo con la pereza, es aún un virtue;)

+0

Hola, gracias por sugerir esa cosa de APC :) Parece que será útil ** si ** Me atengo a esta forma de incluir archivos. – thedeveloper

+0

Acabo de hacer una investigación sobre APC y parece que es lo que necesito. Instalé APC. Tener que perfilar con y sin él. Pero por lo que dice la gente, es bueno tenerlo independientemente de las notables diferencias de rendimiento. – thedeveloper

1

ralentizará su sitio, aunque probablemente no por una cantidad notable. Sin embargo, no parece una forma saludable de organizar su aplicación; Lo reconsideraría. Intente separar la lógica de la aplicación (por ejemplo, la mayor parte del código del lado del servidor) de la capa de presentación (por ejemplo, el HTML/CSS).

+0

Incluso si lo hago, existe el problema de incluir varios archivos compartidos. Espero que tenga sentido. Supongamos que elimino cosas de la presentación. Pero la lógica empresarial tendrá su propio conjunto de archivos php.Todos estos archivos de lógica biz requerirán una cantidad variable de archivos php comunes. Mismo problema de incluir viene de nuevo. ¿Qué sucede si reorganizo/agregué/eliminé/fusioné algunos archivos comunes? Tengo que ir a cada archivo biz logic php y cambiar las rutas include. Si tengo una buena idea del rendimiento alcanzado, puedo tomar una decisión. – thedeveloper

1

que no es una mala práctica si los archivos son pequeños y sólo contiene definición y configuración. si realmente ejecutan código, o extremadamente grande, causará un problema de rendimiento. ahora, si su sitio tiene 3 visitantes por hora, a quién le importa, si tiene 30000 ... ese es otro problema, y ​​debe esforzarse más para minimizarlo.

-1

Vivo por "incluir lo menos posible, tanto como sea necesario", así que generalmente solo incluyo mi configuración y manejo de sesiones para todo y luego cada página incluye justo lo que necesitan usando una ruta de inclusión definida en la configuración include, entonces, para los cambios de ruta, solo necesita cambiar un archivo.

Si incluye todo, la desaceleración no se notará hasta que reciba muchos hits de página (varias visitas por segundo), por lo que en su caso, incluir todo podría estar bien.

0

Puede migrar algunas de las desventajas de la compilación de código PHP utilizando XCache. Este módulo PHP almacenará en caché el PHP-opcode, lo que reduce el tiempo de compilación y el rendimiento.

4

Si su sitio está orientado a objetos, recomiendo usar la función de carga automática (http://php.net/manual/en/language.oop5.autoload.php).

Esto utiliza un método mágico (__autoload) para buscar una clase cuando sea necesario (es flojo, como tú!), Por lo que si una página en particular no necesita todas las clases, no tiene que obtenerlas !

Una vez más, sin embargo, esto depende de si está orientado a objetos o no ...

+0

¡Oye, gracias! :) Una gran parte de mi código es OO. Revisaré el enlace. – thedeveloper

+0

Aunque uso autocarga todo el tiempo (es genial), es un mal consejo cuando la velocidad es un problema. Autoload es mucho más lento que incluir todo, y aún más lento cuando las cosas se incluyen de forma selectiva manualmente. Por último, es una mala práctica usar __autoload. Use spl_autoload en su lugar. – Evert

0

Teniendo en cuenta el tamaño de su sitio web; si no has notado una desaceleración, ¿por qué intentar solucionarlo?

Cuando se trata de sitios más grandes, lo primero que debe hacer es instalar APC. A pesar de que su método actual de incluir archivos podría no beneficiarse tanto de APC como podría, APC aún hará un trabajo increíble acelerando las cosas.

Si la velocidad de respuesta sigue siendo problemática, debe considerar incluir todos sus archivos. APC mantendrá una versión almacenada en caché de sus archivos de origen en la memoria, pero solo puede hacer esto bien si hay sin condición incluye.

Solo cuando su aplicación PHP tiene un tamaño donde el agotamiento de la memoria es un gran riesgo (tenga en cuenta que para la mayoría de los sitios web a gran escala la memoria no es el cuello de botella) es posible que desee incluir partes de su aplicación.

Rasmus Lerdorf (el hombre detrás de PHP) está de acuerdo: http://pooteeweet.org/blog/538

+0

Para responder la pregunta en la primera línea: si estoy metido en este método de inclusión, y ** marketing ** realiza un milagro y luego el sitio web recibe 50000 visitas al día, estaré en problemas. – thedeveloper

+0

500000 visitas todavía no es motivo de preocupación. Sugiero pasar tiempos en cosas como la configuración del servidor web y las consultas SQL en ese caso. – Evert

0

Como otros han dicho, no debería retrasar las cosas mucho, pero no es 'ideal'.

Si el problema principal es que eres demasiado perezoso para ir cambiando las rutas de todos los archivos incluidos (si la ruta necesita ser actualizada en el futuro). Luego puede usar una constante para definir la ruta en su archivo principal, y usar la constante cada vez que necesite incluir/requerir un archivo.

define('PATH_TO_FILES', '/var/www/html/mysite/includes/go/in/here/'); 

require_once PATH_TO_FILES.'database.php'; 
require_once PATH_TO_FILES.'sessions.php'; 
require_once PATH_TO_FILES.'otherstuff.php'; 

De esta manera, si la ruta cambia, solo necesita modificar una línea de código.

-1

De hecho, ralentizará su sitio web. La mayoría debido a la relativa carga lenta y el procesamiento de PHP. Cuantos más códigos quiera incluir, más lenta será la aplicación.

Cuestiones relacionadas