CACHE y OPTIMIZACIONES

43 views
Skip to first unread message

alberto diez

unread,
Dec 9, 2012, 3:48:21 PM12/9/12
to phpbar...@googlegroups.com
Voy a iniciar un proyecto un poco grandecito en cuanto a tráfico y demás.

Antes de nada quería barajar todas las posibilidades y tengo grandes dudas en cuanto a las medidas que puedo implementar.

He estado mirando por google un poco, y veo que smarty es un buen motor de plantillas, que memcached es muy útil, pero me pierdo un poco con todo esto...

Podeis inspirarme y orientarme un poco? 

Gracias

Oscar Gómez

unread,
Dec 10, 2012, 3:40:35 AM12/10/12
to phpbar...@googlegroups.com
Tres cosas.

1) Hay varios niveles de cache. Mírate Varnish para estáticos, lo encontrarás interesante.

2) Smarty es bonito y tiene una comunidad detrás que lo respalda y lo hace crecer mucho. Está bien documentado. Sin embargo para grandes proyectos se vuelve pesado. Tiene su propio sistema de cache que es algo rarito.

3) Si vives en Barcelona, te puedes pasar por el evento del WeLovePHP ( http://welovephp.es/ ) que es este sábado. Hay gente ahí que te va a poder ayudar bastante. Llévate un bloc de notas, paciencia y un buen laptop pq te vas a hartar de aprender. Sé que está feo que hable de otros eventos aquí, pero es que éste viene de perillas y está cerca.

--
Has recibido este mensaje porque estás suscrito al grupo "Grupo de programadores PHP de Barcelona" de Grupos de Google.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/phpbarcelona/-/s2-2BdZuDyEJ.
Para publicar una entrada en este grupo, envía un correo electrónico a phpbar...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a phpbarcelona...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/phpbarcelona?hl=es.

alberto diez

unread,
Dec 10, 2012, 7:16:10 AM12/10/12
to phpbar...@googlegroups.com
Hola, ante todo gracias por responder.

No vivo en Barcelona, pero creo que va siendo hora de planificar alguna escapada para uno de tantos eventos que tenéis  Son todos interesantes, y este por lo que he visto pinta muy bien.

Por otro lado, en cuanto a los niveles de cache, a que te refieres: 
- Entiendo que se puede tener cache en la base de datos
- Y en memoria

¿no?

Puedes ampliar brevemente esto, para indagar yo y aprender un poquito más? jej

Por otro lado, a que te refieres con varinish para estáticos? No conocía esta opción, voy a indagar, aunque veo que hay pocos recursos en español...

Smarty ya he toqueteado un poco... y no lo veo complicado, pero quiero evaluar todas las opciones, para tomar la mejor decisión.

Es un proyecto que puede tener varios miles de visitas de manera concurrente, asi que mientras más cubierto este el proyecto desde ahora, mejor..

Alguna sugerencia más?

Oscar Gómez

unread,
Dec 10, 2012, 7:57:09 AM12/10/12
to phpbar...@googlegroups.com
Yo en mis proyectos tengo varias caches funcionando al mismo tiempo:
- Cuando hago una petición a la base de datos, guardo los resultados en una caché si no es información volátil (últimos mensajes de un foro es volátil). Si vuelven a pedir la misma información tiro de cache.
- Cuando monto una página, la pongo en caché, pero esta dura poco. De esta forma, si me vuelven a pedir la misma página en un periodo corto de tiempo, suministro la misma y no tengo que volver a construirla. Esto lo puedes hacer con el sistema de templates, que suelen tener cachés propias.
- El código PHP lo guardo en OPCodes, de forma que no se tiene que ir interpretando A CADA petición, sino que ya está "precompilado" para que se gane en velocidad (un 80% aprox) [ http://devbee.com/opcode_cache_for_dummies ].
- Los ficheros estáticos, que son los que se envían completos y se modifican muy poquito (.css, .js, .jpg, .png, ....) los tengo detrás de un Varnish, de forma que ya están "flotando en la red" y cuando los piden se sirven sin necesidad de irlos a buscar al servidor. Ya de paso, los css y js los tengo en gzip para que no se coman el ancho de banda.

Hay muchas más técnicas, pero empieza por estas que te van a llevar un tiempo.

Si te atreves, mírate también Twig. Es otro sistema de templates, pero te puede asustar si no estás acostumbrado a la herencia entre templates y a los objetos.

Y si vas a la WeLovePHP, saluda :)

Para ver este debate en la Web, visita https://groups.google.com/d/msg/phpbarcelona/-/GEf5W65H8-kJ.

alberto diez

unread,
Dec 11, 2012, 7:33:33 AM12/11/12
to phpbar...@googlegroups.com

Muchas gracias por tu inestimable ayuda!! Sigo investigando.

Un par de consultas más:
- La cache de la base de datos, por donde investigar para este tema. Como se puede cachear unas consultas si y unas no? Por donde indago?
- Para la cache de páginas, por ejemplo para una ficha que muestra información y que salvo algún valor el resto es poco probable que se modifique. Es mejor reutilizar smarty o twig, que meterse a hacer un sistema propio, verdad?
- Por ultimo, para un buscador donde se muestren fichas de productos que puedan modificar algun valor como por ejemplo el precio, etc..(es un ejemplo).. Que tipo de cache o recomendaciones me das?

Creo que con esto no os mareo más.

Y sobre todo mil gracias por tu inestimable ayuda!

Juanma Orta

unread,
Dec 12, 2012, 3:18:18 AM12/12/12
to phpbar...@googlegroups.com
Hola Alberto,

El caché de base de datos lo puedes gestionar directamente con el motor de base de datos que utilices (entiendo que es mysql). Para activarla, puedes hacerlo de dos formas:

- a nivel global en el archivo de configuración del mysql (my.cnf). De este modo, se cachean todas las consultas (en realidad, sólo las de lectura SELECT)
- directamente en la query, lo que te permite elegir qué consultas cacheas. Así, en una query del tipo SELECT * FROM mytable WHERE ..., deberías poner SELECT SQL_CACHE * FROM mytable WHERE ...

En la caché de páginas, yo utilizaría Smarty o Twig, pocas veces sale a cuenta reinventar la rueda, a no ser que tengas muy claro que necesitas algo que no está implementado, o tengas ganas de hacerlo.

Smarty te permite cachear a nivel de página, de modo que puedes elegir qué cacheas y qué no. Además, puedes establecer cuánto tiempo queda cacheado el contenido. Si por ejemplo, hay contenidos dinámicos que cambian con poca frecuencia (ej. un precio que cambia sólo varias veces al año), puedes cachear la página por horas o días. Si es una página con un listado en el que se añaden items cada pocos minutos, puedes cachearla sólo durante 2 o 3 minutos. Así, pasas de hacer una consulta cada vez que haya una visita a la página, a hacer una cada 2 o 3 minutos. Que el contenido quede "congelado" durante ese tiempo no suele ser demasiado crítico, y la descarga de trabajo al servidor es bestial, especialmente en términos de concurrencia.

Smarty hace la gestión del caché con archivos en disco, pero también puedes configurarlo para que deje los archivos en RAM, utilizando memcache.

Saludos!
Reply all
Reply to author
Forward
0 new messages