¿Cómo se mejora el rendimiento de Drupal?

54

Drupal es rápido en su desarrollo, pero el rendimiento es muy pobre. Es difícil llegar a 50 solicitudes por segundo.

Y hay tantas consultas SQL en una página web simple. Si prueba el tiempo de solicitud de un formulario enviado en Drupal.org, siempre tardará unos segundos en completarse.

¿Cómo mejora la velocidad de su sitio web?

Bruce Dou
fuente
3
¿Realmente has buscado en el sitio? No puedo imaginar que esto no se haya discutido repetidamente antes.
Letharion
1
Mira mis diapositivas goo.gl/30yi39 debería ayudarte
mikeytown2

Respuestas:

61

Almacenamiento en caché, almacenamiento en caché y almacenamiento en caché.

Algunas sugerencias que he dado previamente a una pregunta similar sobre do

  1. Poner Varnish u otro proxy inverso frente a su http-deamon es probablemente lo mejor que puede hacer.
  2. Durante DrupalCon Copehagen, Rasmus declaró que usar un caché de código de operación php, como APC , es una de las mejores cosas que puede hacer para acelerar PHP en general. El rendimiento mejora con las nuevas versiones de PHP. También hay beneficios adicionales para actualizar PHP cuando actualiza Drupal. De 6 a 8, Drupal pasará por un cambio importante hacia la orientación de los objetos, que también es donde la mayoría de las mejoras de rendimiento ocurren en las versiones más recientes de PHP.
  3. Memcache es una opción popular para acelerar el caché, al colocar el caché en la memoria en lugar del disco.
  4. Los paneles + almacenamiento en caché combinados con acciones de caché pueden aumentar significativamente el rendimiento, incluso para los usuarios registrados, ya que admite una lógica bastante compleja.
  5. El Entity Cache es un aumento de velocidad agradable y de configuración cero para cualquiera que use Drupal 7.
  6. Los sitios con mucha escritura tienen menos soluciones "bien establecidas". Algunas opciones incluyen.
    1. Mover escrituras frecuentes por completo, por ejemplo, estadísticas, en otro lugar, como Google Analytics.
    2. Almacenamiento en caché de operaciones de escritura frecuentes con una solución personalizada en algo como NodeJS que escribirá en DB una vez cada Xth segundo.
    3. Sacrifique el ACID sagrado y use una base de datos como MongoDB . (Ver el comentario de Berdir a continuación)
    4. Agrupe su base de datos SQL. Realiza lecturas de una base de datos, escribe en otra. Esto es nativo de D7 y Pressflow puede ayudar con eso en D6.
Letharion
fuente
Todo esto se ha agregado, pero todo esto es para el almacenamiento en caché de lectura, no es bueno para los sitios que tienen mucha escritura.
Bruce Dou
No dijiste nada específico sobre las escrituras. :) Agregaré algo al respecto en mi respuesta.
Letharion
1
Aclaración sobre MongoDB. No puede cambiar su base de datos completa a MongoDB. MongoDB es algo completamente diferente a un DBMS como MySQL y, por ejemplo, no usa SQL. Solo puede reemplazar ciertos componentes conectables y usarlos para almacenar una parte de sus datos en MongoDB, por ejemplo, campos, registros, bloques, etc.
Berdir
@Letharion >> Agrupe su base de datos SQL. Realiza lecturas de una base de datos, escribe en otra. Pressflow puede ayudar con eso. ¿Cómo se puede lograr esto?
GoodSp33d
1
¡Gran respuesta! Definitivo. Para agregar a esto, eche un vistazo al módulo de Agregación avanzada de CSS / JS , ya que entiendo que la agregación reduce las solicitudes de archivos CSS y JS únicos, lo que ayuda a mejorar el rendimiento.
therobyouknow
23

Estas son notas de mis experiencias y pueden variar de lo que otros experimentan. Principalmente uso la pila LAMP y he considerado lo mismo en mis sugerencias.

Reglas generales para el almacenamiento en caché que generalmente sigo.

  1. Procesar una vez Usar varias veces.
  2. Vive con datos obsoletos cuando sea posible
  3. Borre los cachés con poca frecuencia y manténgalos muy específicos.
  4. Cuando sea posible, realice los cambios en el nivel más bajo de la pila. LAMP - DCCc: Linux, Apache, Mysql, PHP, Drupal Core, Contrib y módulo personalizado.

Mejorar el rendimiento de un sitio Drupal (en el orden creciente de complejidad)

  1. Mantenga el núcleo actualizado, el módulo contrib y los temas actualizados. Si importa.

  2. Instale APC en su servidor. (Movido al principio basado en la sugerencia de Letharion)

  3. Caché de página: admin / config / development / performance Diferencia entre la vida útil mínima de la caché y la caducidad de las páginas en caché

  4. Almacenamiento en caché de bloques https://drupal.org/project/blockcache_alter Opciones de almacenamiento en caché para todos los bloques.
  5. Agregue archivos JavaScript y CSS - Mejoras de front-end https://www.drupal.org/project/advagg
  6. Deshabilitar módulos innecesarios. Cada módulo se suma a la cantidad de código que debe estar disponible para una carga de página. Y también aumenta el número de búsquedas. Donde sea posible, utilice un módulo genérico en lugar de un módulo múltiple que realice funcionalidades específicas.
  7. Contenido de vistas en caché: almacenamiento en caché con reconocimiento de vistas https://www.drupal.org/project/views_content_cache
  8. Deshabilitar el registro de la base de datos: use https://drupal.org/project/syslog_ng
  9. Reduzca los errores 404 - http://www.brokenlinkcheck.com/
  10. Respuestas rápidas 404 - https://drupal.org/project/fast_404 - Intente el manejo a nivel de servidor.
  11. Validaciones del lado del cliente: https://www.drupal.org/project/clientside_validation
  12. Comprimir imagen: https://www.drupal.org/project/imageapi_optimize
  13. Carga diferida de imágenes: no cargue imágenes innecesarias - https://www.drupal.org/project/lazyloader
  14. Use hojas de Sprite: https://www.drupal.org/project/spritesheets

  15. Establezca el valor mínimo de tiempo de vida de la memoria caché en un número mayor y use módulos de limpieza de la memoria caché para borrar las memorias caché de páginas específicas: cada vez que edito / actualizo un nodo, todas las memorias caché de página para usuarios anónimos se pierden

  16. Utilice el módulo de desarrollo para ver consultas.
  17. Reescriba las consultas de vistas / evite las vistas si es una exageración.
  18. XHProf - https://www.drupal.org/project/XHProf
  19. FPM, HHVM.
  20. Perfiles y ajustes de bases de datos: https://www.drupal.org/project/dbtuner
  21. Utilice Boost , no Bootstrap DB si no es necesario. https://drupal.org/project/boost Para la mayoría de los sitios pequeños a medianos, Boost es lo suficientemente bueno y es posible que no necesite Proxies inversos más o menos.
  22. Utilice CDN: https://www.drupal.org/project/cdn Es fácil de configurar.
  23. Si sus tablas de caché son enormes, use Memcached: si puede instalar memcached y configurar la RAM, no es tan complejo como parece.
  24. Etags: configure Etags correctamente. https://developer.yahoo.com/blogs/ydnfiveblog/high-performance-sites-rule-13-configure-etags-7211.html
  25. Utilice el servidor proxy inverso : barniz (al menos para los activos). Ayuda mucho si la mayoría de sus usuarios son anónimos.
  26. Transferencia comprimida: habilite la compresión gzip
  27. Mantenerse vivo: use conexiones persistentes siempre que sea posible.
  28. JPEG progresivo -
  29. CACHING IN CODE - El blog de Eaton es asombroso. http://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7
  30. Implemente Calentamiento de caché: https://www.drupal.org/project/cache_warmer : caché Calentar las páginas antes de que el usuario final las golpee.
  31. Master Slave DB Config - https://www.drupal.org/project/autoslave facilita la configuración de uno.
  32. Clústeres de bases de datos: https://stackoverflow.com/questions/1163216/database-cluster-and-load-balancing
  33. Balanceadores de carga: http://en.wikipedia.org/wiki/Load_balancing_(computing)
  34. Utilice el calentamiento heurístico de caché: https://www.drupal.org/project/cache_graceful
  35. Caché de usuario autenticado: https://www.drupal.org/project/authcache
Gokul NK
fuente
Reposicionando la respuesta que había escrito para drupal.stackexchange.com/questions/118990/… . Por cierto, estaba cerrado diciendo que era demasiado amplio. No estoy seguro de si hay mucha diferencia en estas dos preguntas :)
Gokul NK
18

El módulo Boost también es bastante útil, crea cachés de archivos estáticos a partir de sus páginas web. Es principalmente para sitios web con mucho tráfico de usuarios anónimos.

Boost proporciona almacenamiento en caché de páginas estáticas para Drupal, lo que permite un rendimiento muy significativo y un aumento de la escalabilidad para los sitios que reciben principalmente tráfico anónimo. Para el alojamiento compartido, esta es su mejor opción en términos de mejorar el rendimiento. En servidores dedicados, es posible que desee considerar Varnish en su lugar.

Apache es totalmente compatible, con Nginx, Lighttpd e IIS 7 semi-compatibles. Boost comprimirá en caché y gzip comprimir html, xml, ajax, css y javascript. Aumenta la lógica de caducidad de caché es muy avanzada; es bastante simple tener diferentes tiempos de vida de caché para diferentes partes de su sitio. El rastreador incorporado garantiza que el contenido caducado se regenere rápidamente para una carga rápida de la página.

Abeja
fuente
1
Boost funciona muy bien para Drupal 7 ahora imao. En una solución de alojamiento compartido, esta es una excelente manera de hacerlo (ya que a menudo no permiten Varnish, por ejemplo).
Sabio
5

Vale la pena mencionar que si está utilizando el controlador de base de datos SQLIte, es posible que deba deshabilitar la sincronización del disco.

/**
 * Implements hook_init().
 */
function HOOK_init() {
  db_query('PRAGMA synchronous = OFF');
}

En algunas configuraciones de servidor, mejorará drásticamente el rendimiento.

ya.teck
fuente
2
Dado que esto lo deshabilitó en cada carga de página, estaba pensando si hay una mejor manera de deshabilitarlo permanentemente. Debería dedicar un tiempo a comprobarlo.
Gokul NK
1
Es posible hacerlo en sites / default / settings.php, agregando un elemento 'init_commands' a la matriz de bases de datos $. Encontré un ejemplo para el "PRAGMA síncrono = OFF" aquí: bitacoles.enging.com/node/210
dinopmi
4

El secreto del rendimiento de Drupal está en el almacenamiento en caché y en seguir las buenas prácticas. Sugerencias:

Drupal back-end

  • Habilite el almacenamiento en caché en la sección Rendimiento .
  • Compruebe rendimiento y rendimiento y escalabilidad Lista de verificación de módulos.
  • Verifique las opciones y la lista de verificación de Drupal 7 Performance Optimization .
  • Deshabilite módulos no utilizados y que no sean de producción (como Devel, Vistas UI, Reglas UI, etc.).
  • Deshabilitar módulos inestables.
  • Deshabilitar estadísticas .
  • Deshabilite el módulo central dblog y reemplácelo con syslog .
  • Deshabilite el módulo principal de Update Manager .
  • Cron: use el cron incorporado de Drupal, no el pobre hombrecrón (considere Elysia o Ultimate cron).
  • Vistas: use caché para vistas en diferentes capas (consulta de base de datos, marcado, basado en el tiempo).
  • Bloques: use el almacenamiento en caché de bloques si su vista es un bloque (por página, usuario, etc.).
  • Bloques: considere ajustar la configuración de caché por bloque mediante el módulo de modificación de caché de bloque .
  • Paneles: utilice la memoria caché tanto como sea posible (para D7 verifique los módulos PCC y PHC ).
  • Entidad: Habilitar caché de entidad .
  • Cuando use múltiples entornos, considere la falta de un módulo que puede mejorar la carga de la página.
  • Habilite el almacenamiento en caché de páginas de usuarios autenticados con el módulo Authcache .
  • Evite los redireccionamientos que ralentizan la experiencia del usuario.
  • Mejore la invalidación de caché mediante el módulo de expiración .
  • Utilice la creación de perfiles PHP antes de la producción (por ejemplo, XDebug ).

Drupal front-end

  • Minimalice las solicitudes HTTP mediante:
    • Habilite la agregación JS / CSS en la sección Rendimiento .
    • Use CSS Sprites para reducir la cantidad de solicitudes de imágenes.
    • Utilice imágenes pequeñas como datos en línea (URI en una hoja de estilo).
    • Use mapas de imagen para combinar varias imágenes en una sola imagen.
    • También considere el uso de carga de imágenes diferidas (ver: Image Lazyloader ).
    • Instale el módulo BigPipe para reducir los tiempos de carga.
    • Considere la carga diferida versus la evaluación diferida.
    • Consulte: Uso del caché del navegador : ¡expuesto!
  • Considere hacer JavaScript y CSS externo (en algunos casos es más rápido).
  • Minify JavaScript y CSS (ver: módulo Speedy ). Evitar en línea.
  • Al hacer referencia a un JS, utilice uno defero asyncatributos.
  • Minimice el número de iframes.
  • Optimice imágenes, fuentes, CSS Sprites, haga que favicon sea pequeño y se pueda almacenar en caché y reduzca el tamaño de las cookies.
  • Reduzca el número de elementos DOM y referencias de caché a elementos accedidos.
  • Haga que sus páginas 404 se carguen más rápido utilizando el módulo Fast 404 .
  • Habilite la agregación de recursos front-end y el almacenamiento en caché con Advanced CSS / JS Aggregation .
  • Ponga hojas de estilo en la parte superior y scripts en la parte inferior.
  • Agregue un encabezado Expires o Cache-Control , también ETags para reducir las respuestas.
  • Usa GET para AJAX y hazlos almacenables en caché.
  • Componentes de precarga y poscarga para aprovechar el tiempo que el navegador está inactivo.
  • A veces, dividir componentes entre dominios puede maximizar las descargas paralelas.
  • No escale imágenes en HTML y mantenga los componentes por debajo de 25k.
  • Evite los filtros, las expresiones CSS, los elementos HTML con src o href vacíos.
  • Utilice el proxy inverso para depurar sus solicitudes web (por ejemplo, Charles ).
  • Utilice herramientas como Y-Slow y PhantomJS para las comprobaciones básicas de rendimiento.
  • Utilice las herramientas de Google PageSpeed para analizar y optimizar su sitio web.
  • Lea sobre las especificaciones de sincronización de navegación W3C ( GitHub ).

PHP

  • Habilite el almacenamiento en caché de PHP (por ejemplo , OpCache , APC ) y ajuste la configuración.
  • Considere usar PHP-FPM en lugar de mod_php más Nginx en lugar de Apache.

Base de datos

Servidor

Sitios web de alto tráfico

Si espera una gran carga para su sitio web, use Varnish. Considere también usar CDN.

Lea más en: Experiencia del mundo real en escala y ajuste de rendimiento


Recursos adicionales:

kenorb
fuente
3

Hay un libro llamado High Performance Drupal que proporciona las mejores prácticas, ejemplos y explicaciones detalladas para resolver varios problemas de rendimiento y escalabilidad. Aprenderá cómo aplicar técnicas de codificación e infraestructura a componentes internos de Drupal, rendimiento de aplicaciones, bases de datos, servidores web y análisis de rendimiento.

En el artículo Rendimiento y escalabilidad en Drupal 7 puede encontrar algunos ejemplos sobre Drupal 6 y Drupal 7 y la siguiente lista:

Proyectos de escalabilidad y rendimiento de Drupal 7 para observar:

Adrian Cid Almaguer
fuente
2

Se han realizado muchos ajustes para optimizar el rendimiento de su sitio Drupal, pero no todos son imprescindibles. Tenemos que buscar ciertas alternativas y técnicas que conduzcan a una plataforma optimizada de Drupal. Caché, sí, es una forma de optimizar el sitio web a través de diferentes medios, pero algunos complementos y consejos adicionales pueden aumentar y afinar su sitio web sin que se realicen procesos sin problemas.

Recientemente hemos publicado un artículo similar en nuestro sitio web que creo que podría ayudarlo a realizar algunos ajustes.

Fuente: http://www.cloudreviews.com/blog/drupal-performance-optimization-tips

Sabih
fuente
2

Hay algunas posibilidades para mejorar la velocidad de Drupal a un nivel razonable sin instalar ningún módulo nuevo. Sí, Drupal tiene configuración de rendimiento.

  1. Puede configurar esto yendo a: YourSiteDomain / admin / config / development / performance
  2. Habilite 'Caché de páginas para usuarios anónimos' en Chaching
  3. Vida útil mínima de la caché: 1 día (si no realiza actualizaciones periódicas)
  4. Caducidad de las páginas en caché: 1 día (si no realiza actualizaciones periódicas)
  5. Habilitar 'Comprimir páginas en caché'
  6. Habilite 'Agregar y comprimir archivos CSS'
  7. Habilitar 'Agregar archivos JavaScript'

  8. Una vez que se configuran estas configuraciones, vaya a: YourSiteDomain / admin / reports / status

  9. Compruebe si hay problemas de permisos para los directorios 'css' y 'js'
  10. Corrija el permiso tal como se define en la página Informe de estado

Y ahora ha terminado con la optimización de velocidad para su sitio drupal 7.

Existen pocas herramientas de prueba de velocidad en línea para verificar la velocidad. Asegúrese de utilizar una de las herramientas de comprobación de velocidad y ejecutar una prueba antes de actualizar la configuración anterior. Y una vez que haya actualizado la configuración de rendimiento, vuelva a ejecutar la prueba de velocidad. Definitivamente verás una mejora.

Pingdom y HTTP Fox (complemento FireFox) son las mejores herramientas para verificar la velocidad del sitio.

La configuración anterior no solo almacena en caché sus páginas para usuarios anónimos, sino que también comprime los archivos CSS y JS. Por ejemplo, si su sitio está cargando 80 archivos, publique estas configuraciones, el número de solicitudes se reducirá al menos en un 50%, por lo que aquí tiene una mejora de velocidad 2 veces mayor en su sitio Drupal.

Y
fuente
2

Como desarrollador de back-end, siempre hay espacio para mejorar su código para aumentar el rendimiento del sitio web. Algunas pautas para los desarrolladores de backend podrían ser:

1) Limpia tu mesa de vigilancia

2) No abuses de la variable API

3) Hacer menos o mejores solicitudes HTTP

4) Mantenga su "módulo de puntos" corto

Cuando se trata del final de la fuente y los creadores de sitios, se puede lograr mucho más, pero es importante tener en cuenta el rendimiento desde todos los puntos de vista.

Fuente: Optimice antes de lanzarlo

targoo
fuente
2

Un sitio no optimizado de Drupal 7 con 2 GB de RAM puede atender satisfactoriamente entre 20 y 25 solicitudes por segundo. Si quieres ir más allá de eso, el sitio requerirá algunos ajustes. Lo que modifique depende de si la mayoría de los usuarios del sitio son anónimos o están autenticados. Estas son las principales cosas que puede hacer para mejorar el rendimiento:

El sitio sirve principalmente a usuarios anónimos:

1) Definitivamente instale y configure APC, memcache y entitycache.

2) Coloque el proxy Varnish frente al servidor web. Se tarda unos 30 minutos en instalar y configurar, pero reducirá drásticamente los tiempos de carga de la página. De hecho, Varnish puede manejar aproximadamente 300 solicitudes por segundo en una máquina de 2 GB si todas las páginas están en caché. Use el módulo Caducar para expirar solo las páginas seleccionadas en la actualización / eliminación de contenido.

3) Use el módulo de Agregación avanzada de CSS / JS para agregar archivos CSS y JS. Intente mover todos los archivos JS al final de la página. Pero tenga en cuenta que esto puede romper su sitio, así que implemente esto en producción después de una prueba exhaustiva. También experimente con la alineación de CSS crítico. En mi experiencia, disminuirá el tiempo de carga de la página en aproximadamente medio segundo.

4) CSS / JS / images deben tener un encabezado de vencimiento futuro. Esto asegurará que los navegadores no soliciten las mismas imágenes CSS / JS / una y otra vez.

5) Asegúrese de que el servidor web esté sirviendo páginas comprimidas / CSS / JS.

Después de implementar los 5 pasos anteriores, su servidor de 2 GB de RAM debería poder procesar 50 solicitudes por segundo con bastante facilidad.

El sitio sirve principalmente a usuarios autenticados:

Optimizar este sitio es más complejo. Dichos sitios se incluyen en una de las dos subcategorías para fines de optimización:

(a) La mayoría de las páginas en el sitio son idénticas, excepto 1 o 2 bloques que tienen información específica del usuario. Por ejemplo, el sitio de Drupal Commerce.

(b) La mayoría de las páginas están completamente personalizadas para el usuario. Por ejemplo, el sitio Drupal Commons.

Si su sitio pertenece a la categoría (a), aplique la mayoría de las técnicas que discutimos para el sitio que sirve principalmente a usuarios anónimos. La única diferencia es que para las páginas que no son de administrador, Varnish deberá eliminar la cookie SESSION del encabezado y servir las páginas almacenadas en caché. Utilice el módulo AJAX Block para bloques de servidores con información específica del usuario utilizando AJAX. De esta manera, la mayor parte de la página se servirá extremadamente rápido usando Varnish y luego la información específica del usuario se servirá a través de AJAX.

Si su sitio pertenece a la categoría (b), use el módulo Authcache. Prefiero no usarlo tanto como sea posible porque requiere bastante configuración y mantenimiento. Pero funciona muy bien. No será tan rápido como usar Varnish, pero podrá manejar 50 solicitudes por segundo que esté buscando.

Si está buscando ir más allá de lo que hemos discutido aquí, eche un vistazo a la Lista de verificación de optimización de rendimiento de Drupal . Divulgación: está escrito por mí. Cita una lista exhaustiva de cosas que puede hacer para que su sitio de Drupal sea increíblemente rápido.

Neerav Mehta
fuente