2011-11-24 18 views
25

Tengo un sitio web de alto tráfico y necesito asegurarme de que mi sitio sea lo suficientemente rápido para mostrar mis páginas a todos rápidamente.Optimización del sitio web de PHP

He buscado en Google muchos artículos acerca de la velocidad y la optimización y esto es lo que encontré:

  • caché de la página
  • Guardar en el disco

Almacenamiento en caché de la página en la memoria:

Esto es muy rápido, pero si necesito cambiar el contenido de mi página, tengo que eliminarlo de la memoria caché y luego vuelva a guardar el archivo en el disco.

guardarlo en el disco

Esto es muy fácil de mantener, pero cada vez que se accede a la página que tiene que leer en el disco.

¿Qué método debo seguir?

+3

Debería agregar más detalles acerca de su sitio web: os, server, cms? ...etc. – soju

+0

uso apache + php + mysql + centos - no cms o framework – ana

+0

¿qué tipo de hosting tienes? ¿compartido? ¿dedicado? –

Respuesta

40

Ene & IDM están bien, pero aquí es cómo:

almacenamiento en caché (páginas o contenidos) es crutial para el rendimiento. Las llamadas mínimas que solicita a la base de datos o al sistema de archivos es mejor ya sea que su contenido sea estático o dinámico.

Se puede utilizar un acelerador de PHP si es necesario ejecutar contenido dinámico:

Mi recomendación es usar Alternative PHP Cache (APC)

Aquí hay algún punto de referencia:

What is the best PHP accelerator to use?

PHP Accelerators : APC vs Zend vs XCache with Zend Framework

Lighttpd – PHP Acceleration Benchmarks

Para almacenar en la memoria caché contenido e incluso páginas, puede usar: Memcached o Redis.

Memcached: gratuito & de código abierto, de alto rendimiento, sistema de almacenamiento en caché de objetos de memoria distribuida, de carácter genérico, pero que se utilicen en la aceleración de aplicaciones web dinámicas mediante la reducción de la carga de base de datos. Memcached es un almacén de valores-clave en memoria para pequeños fragmentos de datos arbitrarios (cadenas, objetos) a partir de resultados de llamadas a bases de datos, llamadas a API o representación de páginas.

Redis Redis es un almacén de código fuente avanzado y de código abierto. A menudo se lo denomina servidor de estructura de datos ya que las claves pueden contener cadenas, hashes, listas, conjuntos y conjuntos ordenados.

Ambas son una herramienta muy buena para el almacenamiento en caché de contenidos o variables.

Aquí hay algún punto de referencia y se puede elegir el que más le guste:

Redis vs Memcached

Redis vs Memcached

Redis VS Memcached (slightly better bench)

On Redis, Memcached, Speed, Benchmarks and The Toilet

Y ou puede instalar también Varnish, nginx, o G-Wan

barniz: El barniz es un acelerador HTTP diseñado para contenido pesado sitios web dinámicos. A diferencia de otros aceleradores HTTP, como Squid, que comenzó su vida como un caché del lado del cliente, o Apache, que es principalmente un servidor de origen, Varnish fue diseñado desde cero como un acelerador HTTP.

nginx Nginx (pronunciado? Motor-x?) Es un servidor web de alto rendimiento/proxy inverso y el correo electrónico (IMAP/POP3) proxy de peso ligero, con licencia bajo una licencia BSD. Se ejecuta en Unix, Linux, variantes de BSD, Mac OS X, Solaris y Microsoft Windows.

g-wan G-WAN es un servidor web con guiones ANSI C y una tienda de valor-clave, que superan a todas las demás soluciones.

Aquí hay algún punto de referencia y se puede elegir el que más le guste:

Serving static files: a comparison between Apache, Nginx, Varnish and G-WAN

Web Server Performance Benchmarks

Nginx+Varnish compared to Nginx

Apache, Varnish, nginx and lighttpd

G-WAN vs Nginx

+6

uso nginx + redis y son superrápidos +1 para la respuesta – Gabriel

4

Tienes una buena idea, que está cerca de lo que yo hago. Si tengo una página 100% estática, guardaré una versión html y la mostraré al usuario en lugar de generar el contenido de nuevo cada vez. Esto ahorra consultas mysql y varias operaciones io en algunos casos. Cada vez que hago algún cambio, la interfaz de mi administración simplemente elimina el archivo html y lo recrea.

Este método ha demostrado ser 100 veces más rápido en mi servidor.

+0

Este es uno de los mejores métodos de almacenamiento en caché, solo recree la página html estática en los cambios. –

+2

Este proceso podría automatizarse con bastante facilidad. –

1

puedo añadir:

  • caché todo lo que puede

  • Reducir al mínimo el número de incluye

  • uso del acelerador

Por favor, investigar, lo que hace que su sitio lento. No te olvides de YSlow y cosas similares, pueden ayudarte mucho.

Además, si usted tiene cálculos pesados ​​se podría escribir la extensión php para ellos, pero no creo que este es su caso

3

La gran pregunta con el rendimiento del sitio web es "¿sirve páginas estáticas, o sirve páginas dinámicas?".

páginas estáticas

La mejor manera de acelerar las páginas estáticas es para almacenar en caché ellos fuera de su sitio web. Si puede, ayúdelos desde un CDN (Akamai, Cotendo, Nivel 3). En este caso, el tráfico nunca llega a su sitio. Hay varias formas de controlar la memoria caché, desde la duración fija hasta las directivas estándar de caché HTTP.

Incluso si no puede servir su HTML desde un CDN, almacenar sus imágenes, javascript y otros recursos estáticos en un CDN puede acelerar su sitio; podría usar un servicio en la nube como Amazon para esto.

Si no puede pagar un CDN para su HTML, puede usar su propia capa de proxy de almacenamiento en caché, como sugiere el libro de Zeus. He tenido buenos resultados con Varnish. Lo ideal sería que ejecutara su proxy de almacenamiento en caché en su propio hardware, pero puede ejecutarlo en sus servidores existentes.

Las páginas dinámicas

Las páginas dinámicas son más difíciles de caché - por lo que entonces usted necesita para concentrarse en hacer las mismas páginas lo más eficiente posible. Esto básicamente significa buscar el cuello de botella: en la mayoría de los sistemas, el cuello de botella es la base de datos (pero de ninguna manera siempre).

Si tiene la certeza de que su cuello de botella es la base de datos, existen varias formas de almacenar en caché: puede almacenar en caché "fragmentos" de HTML o puede almacenar consultas en la base de datos. Usar un acelerador ayuda con esto; no inventaré uno desde cero. Esto probablemente signifique volver a diseñar (partes de) su aplicación.

2

Primero debe perfilar su sitio.

En lugar de adivinar salvaje uno tiene que determinar cierto cuello de botella y resolver ese problema.

Cahing no es una bala de plata ni un sinónimo para la optimización.
A veces, el almacenamiento en caché no es aplicable (para los anuncios, por ejemplo), a veces no sirve de nada ya que la razón de la lentitud del sitio ht puede estar en algún lugar no relacionado.
Su sitio puede quedarse sin memoria. Por lo tanto, el almacenamiento en memoria caché empeorará las cosas.

No puedo creer que alguien tenga un sitio de alto tráfico y dijo que ni una palabra del perfil previo. ¿Cómo se puede ejecutar sin saber nada de sus partes internas? Carga de CPU, carga de memoria, disco de E/S y tal.

Cuestiones relacionadas