Este documento presenta una discusión sobre optimización de rendimiento en Drupal. Aborda temas como la importancia del rendimiento, tipos de caché como servidor web, PHP, Drupal y base de datos, herramientas de testing como Apache Bench y XHProf, optimización de código PHP con APC, caché del núcleo de Drupal, y opciones de caché como APC, Memcache y archivos. También cubre temas como escalabilidad y rendimiento general del sitio.
2. 1. Importancia del rendimiento (Fer)
2. Rendimiento - Escalabilidad (K)
3. Caching (Fer)
4. Tipos de memoria caché: Servidor Web, PHP, Drupal y Base
de datos (K)
6. Testing JM Meter - XHProf- AB - Devel (K)
7. Optimizar el código PHP (APC+buenas praticas) (Fer)
8. Core Cache De Drupal (tablas + configuración) (K)
9. APC, Memcache, File (Fer)
10. Boost (K)
11. Demo y Conclusiones (K)
3. Karim Boudjema (KarimB)
Drupal themer and developer
Con Drupal desde 2008
Miembro activo de Drupal
Bolivia y Drupal Belgium
Especialidades: Text Mining
(NLP), Periódicos online
Drupal Blog:
http://www.webenstock.com
4. Trabajo
Technical Leader
@develCuy Comunidad
Facebook, Twitter, Identi.ca Fundador de Drupal Perú
http://develcuy.com http://drupal.org/user/125473
5. 1. Afecta la experiencia del usuario
1. SEO, los buscadores han comenzado a
despriorizar las páginas web lentas
2. La arquitectura puede verse muy afectada
con tal de conseguir mejor rendimiento.
9. No importa cuan asombrosa sea una página
web, si es lenta entonces el usuario
insatisfecho ni alcanzará a verla o nunca más
volverá, incluido el usuario “indexador web”.
El desafío és proveer contenidos, formatos y
funcionalidades sin afectar el rendimiento.
El rendmiento está dirigido por la
arquitectura (architecture driven)
10. Escalabilidad
◦ El sistema puede acomodarse al incremento de
su uso
su volumen de datos
Rendimiento
◦ Tiempo de respuesta del servidor + tiempo de
carga de la página
„Que tan rápido se carga la página?‟
11. Del Top 50 de los sitios de AL, todos
los sitios toman menos del 14% del
tiempo de carga total, para obtener el
documento HTML.
El 86% restante es para obtener los
documentos vinculados al documento
HTML como CSS, JS, imágenes.
Una clave de la performance se
encuentra en la optimización del
Front End.
elcomercio.pe - HTML = 622ms (3%) – Documents: 19852 ms
12.
13. datos duplicados de otros
"Es un conjunto de
originales, con la propiedad de que los datos
originales son costosos de acceder,
normalmente en tiempo, respecto a la copia en la caché.
Cuando se accede por primera vez a un dato, se hace
una copia en el caché; los accesos siguientes se
realizan a dicha copia, haciendo que el tiempo de
acceso [...] al dato sea menor."
- Wikipedia
15. SQL
APACHE PHP Queries MySQL
Browser Reverse MOD OpCode Cache Query
Cache CDN Expires Boost
proxy Deflate
Cache engine Cache
LINUX
16. No podemos implementar políticas de
rendimiento sin una evaluación.
Apache Bench (AB)
Devel
Jmeter
XHProf (Ahora integrado a devel)
On line tools:
◦ Load Storm: http://loadstorm.com/
◦ Monitis: http://portal.monitis.com/
Here comes your footer Page 16
17. ◦ Fácil, simple y todos lo tenemos instalado
◦ ab -c 1 -n 100 http://example.dev/
◦ ab -c 1 -n 100 –C PHPSESSID=<sessid> http://example.dev/
◦ Donde
-c = concurrencia de los requerimientos
-n = total de requerimientos a la pagina
◦ En este caso haremos 100 requermientos a la página
http://example.dev/
◦ Un solo indicador: „Requests per second‟
◦ Evaluaremos nuestras distintas políticas de caché con este
indicador
18. Permite evaluar para una página:
◦ Mysql
# total de consultas
Tiempos total para todas las consultas en ms
Ver las consultas más lentas
Para cada consulta
Tiempo de realización en ms
# de veces que la consulta ha sido realizada
Ver EXPLAIN
◦ Página
Tiempo total de carga de la página en ms
◦ Hacer la diferencia entre la performance de Mysql y del resto de la página
◦ Uso de la Memoria
Para configurar
◦ Configuation >Development > Devel Settings
19. Performance Logging
◦ Ya no es parte del módulo devel desde 07/2011
◦ Será parte del módulo Performance:
http://drupal.org/project/performance
◦ Podemos utilizar Profiling
http://drupal.org/project/profiling
20.
21. “¿Éslo que la gente usualmente
considera la forma apropiada de hacer algo?
¿Hay una forma "usual", es decir, una
forma generalmente aceptada? ¿Se
endiente como la forma “apropiada”? Si
podemos responder esto afirmativamente,
entonces tenemos una Buena Práctica.” (traducido)
- The IT Skeptic
22. En el código fuente de Drupal, la caché se
guarda en dos lugares diferentes:
- La memoria estática de PHP
- La caché de Drupal
23. <?php
function phpmemory_set() {
static $value;
if (!isset($value)) {
$value = "gran cantidad de datos";
}
return $value;
}
?>
26. Evita múltiples consultas a la base de datos
Sirve sobre todo para los usuarios anónimos
Conocer cada tabla nos permitirá elegir los bins con los
distintos cache engine (memcache, file, apc)
Nos permite ganar 500% a 700% de performance para
usuarios no autenticados
En D7 tenemos nuevas tablas
27. El sistema de caché de Drupal almacena sus datos en las
siguientes tablas de la base de datos:
Por defecto Configurable
1. cache – Conf. de los modules, schemas, themes ect. 1. cache_page – registra una copia
2. cache_bootstrap – variables y información durante el completa de del código html de las
bootstrap paginas pero solo para usuarios no
3. cache_field – fields de las entidades autenticados.
4. cache_images – imágenes procesadas 2. cache_block – registra una copia de
5. cache_path – URL alias los bloques
6. cache_menu – registra una copia de los menús y de las
URLs asociadas a estos menús
7. cache_filter – registra una copia del contenido de
nuestros nodos filtrados
8. cache_form – registra una copia de los formularios del
sitio
9. cache_update – registra los updates disponibles
28. Vamos en Configuration > Development > Performance
Caché de páginas
◦ Mínimo de permanencia en cache de Drupal
◦ Máximo de permanencia en cache externo
◦ Compresión de páginas: siempre mejor con Apache
Para ver si nuestro server ya realiza la compresión:
http://www.whatsmyip.org/http_compression/
Caché de bloques
◦ No lo necesitamos para usuarios no autenticados
Optimizaciones del ancho de banda
◦ Optimizar archivos CSS: Activado (solo en producción)
◦ Optimizar archivos JavaScript: Activado (solo en prod.)
34. •Boost crea un archivo .html para
todas las páginas visitadas por los
usuarios anónimos.
•El próximo usuario anónimo leerá
este archivo .html en vez de ir al
index.php y la BD.
•Es un excelente caché por
archivos estáticos que se ejecuta
desde el .htaccess gracias a
mod_rewrite.
35.
36. Pensar en performance desde el principio
Performance es un diseño ligero
Pocos módulos (process)
APC Opcode
Consultas Mysql optimizadas (Explain) y Query Cache
Robot.txt (Crawl-Delay: 10)
Usuarios anónimos
◦ Cache del core (solo páginas)
◦ Boost
◦ Varnish
◦ Cache actions (mantenimiento)
Usuarios autenticados
◦ Cache engine APC para Bins importantes y con mucha actualización
◦ Cache engine memcache si cantidad grande de datos
◦ Cache file si no cambia mucho en el tiempo
Testing, testing, testing…