Pregunta

estoy construyendo un PHP sitio, pero por ahora el único PHP Estoy usando media docena de inclusiones en ciertas páginas.(Probablemente usaré algunas consultas de bases de datos eventualmente).

son simples include() Declara una preocupación por la velocidad o la escala, a diferencia de la estática. HTML?¿Qué tipo de cosas tienden a hacer que un sitio se estanque?

¿Fue útil?

Solución

Estrictamente hablando, el HTML directo siempre funcionará más rápido que un enfoque del lado del servidor, ya que el servidor no tiene que interpretar el código.

Para responder a la pregunta más importante, hay son una serie de cosas que harán que su sitio se estanque;simplemente no existe un umbral específico para determinar cuándo su código está causando el problema y cuándo.PHP.(tenga en cuenta que muchos de los sitios de Yahoo están basados ​​en PHP, así que no crea que PHP no puede escalar).

Una cosa que he notado es que los sitios basados ​​en PHP que son más lentos son los que incluyen más de lo necesario para mostrar una página específica.OSCommerce (oscommerce.com) es uno de los carritos de compras basados ​​en PHP más populares.Sin embargo, tiene la mala costumbre de incluir todas sus funciones principales (en caso de que sea necesario) en cada página.Entonces, incluso si no necesita mostrar un 'cuadro de información', la función se carga.Por otro lado, existen muchos frameworks PHP (como CakePHP, Symfony y CodeIgniter) que adoptan un enfoque de "cargarlo cuando lo necesites".

Yo recomendaría lo siguiente:

  1. No incluya más funciones de las que necesita para una página específica
  2. Mantenga las funciones básicas separadas (use un enfoque MVC cuando sea posible)
  3. Utilice require_once en lugar de include si cree que tendrá inclusiones anidadas (p. ej.la página A incluye el archivo B que incluye el archivo C).Esto evitará incluir el mismo archivo más de una vez.También detendrá el proceso si no se puede encontrar un archivo;ayudando así a su proceso de solución de problemas;)
  4. Almacene en caché las páginas estáticas como HTML si es posible, para evitar tener que volver a analizar cuando las cosas no cambian

Otros consejos

Ciertamente, include() es más lento que las páginas estáticas.Sin embargo, con los sistemas modernos no es probable que esto sea un cuello de botella durante mucho tiempo, si es que alguna vez lo ve.En mi opinión, los beneficios de usar inclusiones para mantener actualizadas las partes comunes de su sitio superan el pequeño impacto en el rendimiento (tener una navegación diferente en una página porque olvidó actualizarla conduce a una mala experiencia de usuario y, por lo tanto, a malos sentimientos sobre su sitio). sitio/empresa/lo que sea).

El uso del almacenamiento en caché tampoco ayudará: el código de almacenamiento en caché será más lento que simplemente incluir().El único momento en el que el almacenamiento en caché le beneficiará es si está realizando cálculos computacionales intensivos (muy raros, en páginas web) o tomando datos de una base de datos.

Parece que estás participando en una optimización prematura.Si la aplicación no está creada, aunque es bueno tener en cuenta los problemas de rendimiento, su principal preocupación debe ser escribir la aplicación.

Las inclusiones son una realidad.No se preocupe por el número, preocúpese por mantener su código bien organizado (la estructura de carpetas PEAR es algo encantador, si no sabe de qué estoy hablando, mire la estructura de los archivos de clase de Zend Framework).

Concéntrese en redactar la solicitud con una cantidad razonable de abstracción.Agrupe todas sus llamadas a su base de datos en una clase (o clases) para minimizar la duplicación de código (principios de KISS y todo) y cuando llegue el momento de refactorizar y optimizar sus consultas, estarán ubicadas de forma centralizada.También comience con algunas pruebas unitarias para evitar la regresión.

Una vez que la aplicación esté en funcionamiento no nos preguntes qué es más rápido o mejor ya que depende de cada aplicación cuál será su cuello de botella.Puede resultar que, aunque tengas muchas inclusiones, tus bucles te estén consumiendo tu tiempo o lo que sea.Usar XDepurar y perfila tu código una vez que esté en funcionamiento.Busque los segmentos de código que consumen una cantidad desproporcionada de tiempo y luego refactorice.Si ahora te concentras demasiado en el impacto en el rendimiento entre include e include_once, terminarás persiguiendo a un fantasma cuando esas solicitudes curl que se ejecutan sincronizadas se estén comiendo tu desayuno.

Aunque mientras tanto, las mejores sugerencias son consultar el manual de php.net y asegurarse de que si hay una función incorporada que hace algo que está intentando hacer, ¡úsela!Las extensiones PHP basadas en C siempre serán más rápidas que cualquier código PHP que pueda escribir y se sorprenderá de cuánto de lo que está intentando hacer ya está hecho.

Pero repito, no puedo enfatizar esto lo suficiente, ¡¡¡La optimización prematura es MALA!!! Simplemente haga que su aplicación despegue con buenos niveles de abstracción, perfile y luego arregle lo que realmente está consumiendo su tiempo en lugar de arreglar lo que cree que podría consumir su tiempo.

No, los incluidos están bien, no hay nada de qué preocuparse.

Es posible que desees pensar en modificar un poco los encabezados de almacenamiento en caché en algún momento, pero a menos que obtengas resultados significativos, no debería ser un problema.Suponiendo que se trata de datos estáticos, incluso podría considerar convertir todo el sitio a HTML estático (la forma más sencilla:escriba un script que tome cada página a través del servidor web y la descargue en una estructura de directorio coincidente)

La mayoría de las aplicaciones web están limitadas por la velocidad de su base de datos (o cualquiera que sea su almacenamiento externo, pero 9/10 veces será una base de datos), el código de la aplicación rara vez es motivo de preocupación y no suena como si fuera usted. Estamos haciendo todo lo que debas preocuparte todavía.

Antes de tomar decisiones duraderas sobre cómo estructurar el código de su sitio, le recomendaría que lea un poco en el Modelo-Vista-Controlador patrón de diseño.Si bien hay otros, éste parece estar ganando mucho terreno en los círculos de desarrollo web y ciertamente permanecerá disponible por un tiempo.Quizás quieras echar un vistazo a algunos de los otros patrones de diseño sugeridos por Martin Fowler en su Patrones de arquitectura de aplicaciones empresariales antes de tomar cualquier decisión final sobre qué tipo de diseño se adaptará mejor a sus necesidades.

Dependiendo del tamaño y alcance de su proyecto, es posible que desee optar por un marco listo para usar para PHP como Zend Framework o PHP On Trax o puede decidir crear su propia solución.

Específicamente con respecto a la representación de contenido HTML, le recomiendo encarecidamente que utilice algún tipo de plantilla para mantener su lógica de negocios separada de su lógica de visualización.Descubrí que esta simple regla en mi desarrollo me ha ahorrado horas de trabajo cuando era necesario cambiar una u otra.He usado http://www.smarty.net/">Smarty y sé que la mayoría de los marcos que existen tienen un sistema de plantillas propio o proporcionan una arquitectura de complemento que le permite usar su propio sistema preferido. método.Mientras analiza posibles soluciones, le recomendaría que busque una que sea capaz de crear versiones en caché.

Por último, si le preocupa la velocidad en el back-end, le recomiendo encarecidamente que busque formas de minimizar las llamadas a su almacén de datos de back-end (ya sea una base de datos o simplemente archivos del sistema).Intente evitar cargar y representar demasiado contenido (por ejemplo, un informe grande almacenado en una tabla que contiene cientos de registros) todo a la vez.Si es posible, busque formas de hacer que la interfaz de usuario cargue bits de datos más pequeños a la vez.Y si está específicamente preocupado por el tiempo de carga real de su contenido html y su CSS, Javascript u otras dependencias, le recomendaría que revise estas sugerencias de los chicos de Yahoo!.

Para agregar lo que mencionó JayTee: cargar la funcionalidad cuando la necesite.Si no está utilizando ninguno de los marcos que hacen esto automáticamente, es posible que desee examinar la funcionalidad __autoload() que se introdujo en PHP5; básicamente, se puede invocar su propia lógica cuando crea una instancia de una clase en particular, si aún no lo está. cargado.Esto le brinda la oportunidad de incluir() un archivo que define esa clase bajo demanda.

Lo más importante que puede hacer para acelerar su aplicación es utilizar un caché de código de operación, como APC.Hay una excelente lista y descripción disponibles en Wikipedia.

En lo que respecta a las inclusiones simples, tenga cuidado de no incluir demasiados archivos en cada solicitud, ya que la E/S del disco puede hacer que su aplicación no se escale bien.Unas pocas docenas de inclusiones deberían estar bien, pero generalmente es una buena idea empaquetar los archivos que se incluyen con más frecuencia en un solo script para que solo tenga una inclusión.El costo en memoria de tener algunas clases aquí y allá que no necesita cargar será mejor que el costo de E/S de disco para incluir cientos de archivos más pequeños.

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