Mejora del rendimiento de Drupal 9 con módulos, mejores prácticas de codificación y la configuración correcta del servidor
Publicado: 2020-08-11Podría tener el servidor más potente con memoria a montones, pero ¿es eso suficiente para garantizar un sitio web de alto rendimiento? Con Drupal, escalar el sitio web en armonía con el crecimiento de su negocio es fácil. De hecho, para eso es genial Drupal. Sin embargo, un aumento repentino de las páginas web, la funcionalidad y el contenido podría afectar su rendimiento. ¡Drupal 9 ya está aquí y está preparado para afrontar este desafío como un profesional! Viene con la bondad de Drupal 8 menos el código antiguo que lo hace más ágil, más limpio y más poderoso. Explore más sobre las técnicas de mejora del rendimiento de Drupal 9 que funcionan absolutamente.
El rendimiento del sitio web es la clave del éxito empresarial. Los sitios web de carga lenta pueden ser perjudiciales para las empresas. Un sitio web con un mejor rendimiento ayuda a mejorar el SEO, mejora la tasa de conversión de los visitantes y brinda una mejor experiencia de usuario a los visitantes, lo que colectivamente ayuda en el crecimiento del negocio. Mientras que los sitios web de carga lenta hacen todo lo contrario y se convierten en la razón del fracaso empresarial.

Hay muchas cosas que afectan el rendimiento del sitio web. Algunos de ellos son:
• Su proveedor de servicios (alojamiento, DNS, etc.)
• Número de solicitudes al servidor
• Problemas técnicos o malas prácticas de programación
• Técnica de almacenamiento en caché
• Configuración incorrecta del servidor
• Archivos de imagen y video pesados
Módulos Drupal 9 Core y personalizados para mejorar el rendimiento
Hay muchos módulos principales y contribuidos disponibles en Drupal 9 que pueden ser útiles para mejorar el rendimiento de su sitio web. Siguiendo ciertas prácticas de codificación y con la configuración adecuada del servidor, puede mejorar drásticamente el rendimiento del sitio.
Módulos centrales
• Big Pipe
El módulo Drupal Big Pipe agiliza las cosas sin necesidad de configuración adicional. Viene empaquetado con núcleo Drupal. Mejora el rendimiento percibido de la interfaz mediante el uso de metadatos de capacidad de caché y, por lo tanto, mejora la canalización de renderizado.
• Caché de página dinámica interna
Este módulo de Drupal 9 ayuda a almacenar en caché el contenido dinámico. Es útil tanto para usuarios anónimos como autenticados. Este módulo no está disponible en Drupal 7. Las páginas solicitadas por los usuarios se almacenan la primera vez que se solicitan y luego se pueden reutilizar cuando se solicita la misma página.
• Caché de página interna
El módulo de caché de página interna ayuda a almacenar datos en caché para usuarios anónimos. Este módulo está disponible en el núcleo y está habilitado de forma predeterminada.
Ruta de configuración: admin / config / development / performance
Aquí puede borrar la caché, establecer la antigüedad máxima de la caché del navegador y del proxy y habilitar / deshabilitar la configuración de agregación.

Módulos contribuidos
- Agregación avanzada de CSS / JS
El módulo Advagg viene con muchos otros submódulos, como: - AdvAgg Cdn: ayuda a cargar activos (CSS / JS) desde CDN público
- Validador AdvAgg CSS / JS: valida archivos CSS y JS
- Minificador externo AdvAgg: Minifica Javascript y / o CSS con un minificador de línea de comandos.
- AdvAgg Minify CSS: ayuda a minimizar los archivos css con un minificador de terceros
- AdvAgg Minify JS: ayuda a minificar archivos js con mi de terceros
- Modificador AdvAgg: permite modificar la matriz CSS y JS. (Puede tener problemas de compatibilidad)
- Mejorador de compatibilidad de AdvAgg Old Internet Explorer
Ruta de configuración: / admin / config / development / performance / advagg
Este módulo también admite técnicas de compresión de archivos como gzip y brotli . Este módulo ayuda a reducir el número de solicitudes http, mejorando así significativamente el rendimiento del sitio.
Blazy
El módulo Drupal 9 Blazy proporciona una carga diferida de imágenes para ahorrar ancho de banda y evitar tasas de rebote más altas. La carga diferida es una técnica que carga imágenes solo cuando está en el área visible para el usuario. Esta técnica de servicios múltiples ahorra tiempo y datos.
Ruta de configuración: / admin / config / media / blazy
Aquí puede habilitar / deshabilitar Blazy, configurar el efecto de marcador de posición y también puede establecer el desplazamiento que determina qué tan pronto será visible la imagen para el usuario.

Módulo Blazy
CDN
El módulo CDN de Drupal 9 ayuda a una fácil integración de CDN en los sitios web de Drupal. Ayuda a servir contenido estático desde el servidor CDN para aumentar la velocidad de entrega de contenido. Aparte de eso, este módulo también es fácil de configurar.
Ruta de configuración: / admin / config / services / cdn

Aquí puede habilitar / deshabilitar el CDN, proporcionar la URL de mapeo y marcar / desmarcar el almacenamiento en caché de archivos para siempre.
Mejora del rendimiento con las mejores prácticas de codificación
Usando isset () sobre array_key_exist ()
El método isset () es significativamente más rápido que array_key_exist () . La principal diferencia entre isset y array_key_exist es que array_key_exists definitivamente le dirá si existe una clave en una matriz. Mientras que isset solo devolverá verdadero si la clave / variable existe y no es nula. Para obtener más información sobre esto, consulte aquí la comparación de puntos de referencia.

Usando entityQuery ()
entityQuery () depende de un controlador de almacenamiento para manejar la construcción y ejecución de la consulta para el almacenamiento de entidad apropiado. Esto tiene la ventaja de que cualquier consulta ejecutada a través de entityQuery () es independiente del almacenamiento. Por lo tanto, si está escribiendo un módulo contribuido o trabajando en un sitio web donde podría ser necesario pasar a un almacenamiento de entidad alternativo en el futuro, todas sus consultas usarán de forma transparente el nuevo backend de almacenamiento sin necesidad de realizar ningún cambio. EntityQuery () se puede usar ya sea que esté escribiendo consultas a mano en código personalizado o mediante el backend de vistas entityQuery () .
Usando el método loadMultiple () en lugar de bucle
Si tiene 10 nids (ID de nodo) y lo recorre para cargar cada nodo, está realizando 10 consultas a la base de datos. Al usar loadMultiple () , se reduce a una sola consulta de base de datos.
Almacenamiento en caché
Al usar Cache API en Drupal 9, puede almacenar en caché el renderizador, la matriz de respuesta o el objeto. Hay tres metadatos de caché de renderización disponibles en Drupal 9.
- Etiquetas de caché
Las etiquetas de caché se utilizan para almacenar datos en caché cuando dependen de las entidades o configuraciones de Drupal. La sintaxis para esto es elemento de caché: identificador por ejemplo, nodo: 5, usuario: 3. - Contexto de caché
Sintaxis:
• los períodos separan a los padres de los niños
• un contexto de caché con varios nombres indica que se puede especificar un parámetro; para usar: agregar dos puntos
Ejemplo: user.roles, user.roles: anónimo, etc. - Cache max-age
Cache max-age se utiliza para almacenar en caché datos sensibles al tiempo.
Trabajador de cola / Lote
Para procesar grandes cantidades de datos sin tiempo de espera de php, se puede utilizar el procesamiento por lotes o el trabajador de cola. Los elementos en el trabajador de la cola se ejecutan solo cuando el cron se ejecuta y se ejecuta durante un breve período de tiempo. Hay dos tipos de trabajadores en cola: fiables y no fiables. El trabajador de cola confiable asegura que el elemento de la cola se ejecute al menos una vez, mientras que una cola no confiable puede omitir elementos debido a fallas en la memoria o por otra interrupción. El procesamiento por lotes procesa los artículos hasta que todos los artículos terminan en el lote acondicionado para que no ocurra ningún error durante el procesamiento sin esperar la ejecución del cron.
Mejora del rendimiento con una mejor configuración del servidor
Usando Nginx en lugar de Apache
Nginx y Apache, ambos son servidores web ampliamente utilizados. Nginx tiene una ventaja sobre Apache en el punto de referencia de rendimiento. También es más rápido y más eficiente que apache. Nginx funciona 2.5 veces más rápido que Apache según una prueba de referencia que ejecuta hasta 1,000 conexiones simultáneas.
HTTP / 2.0 sobre HTTP / 1.1
HTTP / 2.0 admite multiplexación, a diferencia de HTTP / 1.1, que bloquea otros recursos. Si no se puede cargar un recurso, HTTP / 2.0 usa la conexión TCP para enviar múltiples flujos de datos a la vez. HTTP / 2.0 utiliza técnicas de compresión de encabezado avanzadas que HTTP / 1.1
Configuración de Nginx para HTTP / 2.0
servidor {
escuchar 443 ssl http2; // configuración de http2
ssl_certificate server.crt;
ssl_certificate_key server.key;
}Sirviendo contenido comprimido
La compresión de respuestas a menudo reduce significativamente el tamaño de los datos transmitidos. Sin embargo, dado que la compresión ocurre en tiempo de ejecución, también puede agregar una sobrecarga de procesamiento considerable que puede afectar negativamente el rendimiento.
Configuración de Nginx para servir contenido comprimido:
servidor {
gzip encendido;
gzip_static on;
gzip_types text / plain text / css application / json application / x-javascript text / xml application / xml application / xml + rss text / javascript;
gzip_proxied any;
gzip_vary on;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
...
}MariaDB en lugar de MySQL
mariaDB ha mejorado la velocidad en comparación con MySQL. Proporciona una indexación y un almacenamiento en caché más rápidos que MySQL. En este caso, es casi un 24% más rápido que MySql. También hay otras métricas clave en las que mariaDB es mejor que MySQL. Por lo tanto, se prefiere MariaDb sobre MySQL en términos de rendimiento.
CDN
CDN significa red de entrega de contenido. Es un grupo de servidores repartidos por todo el mundo (también conocidos como puntos de presencia o PoP), que trabaja en conjunto para entregar el contenido más rápido. CDN almacena la versión en caché del contenido del sitio y entrega el contenido desde el servidor disponible más cercano. Algunos de los proveedores de CDN populares son Cloudflare, Amazon cloudfront, Google cloud cdn, etc.
