Buenas @sergioseller97,
Vamos a desglosar esto, que son dos puntos clave para el rendimiento de PrestaShop 8.1.7.
1. Configuración de Redis/Memcached:
Para que Redis funcione correctamente como sistema de caché en PrestaShop, necesitas:
- Extensión PHP: Como bien apunta @alberto_lab, la extensión
ext-redis DEBE estar instalada y activa para tu versión de PHP (8.0 en tu caso) en ambos entornos: el del servidor web (FPM/mod_php) y el de la línea de comandos (CLI). Puedes verificarlo con phpinfo() o php -m | grep redis.
- Servidor Redis: Asegúrate de que el servicio de Redis esté corriendo en tu servidor y que sea accesible desde PrestaShop con el
Host y Puerto correctos que indicas en Parámetros avanzados > Rendimiento > Almacenamiento en caché.
- Si usas un socket (recomendado para rendimiento en el mismo servidor), el
Host será la ruta al archivo del socket (ej. /var/run/redis/redis.sock) y el Puerto sería 0.
- Si es por TCP, asegúrate de que el firewall no esté bloqueando el puerto (normalmente 6379).
- Contraseña: Si tu instancia de Redis tiene contraseña, debes introducirla en el Back Office.
El problema con tu snippet de PHP, si el servicio Redis no está inicializado o falla la conexión, es que get('prestashop.cache') podría devolver un adaptador de caché fallido o vacío, o incluso el mismo container podría no inicializarse correctamente al arrancar PrestaShop. Usar CacheInterface es la forma más limpia.
Aquí tienes una forma más robusta de interactuar con el servicio de caché en tu módulo, asegurando que el tipo de interfaz sea el esperado y manejando correctamente la ausencia de datos:
// En un controlador o servicio de tu módulo personalizado
// Asegúrate de inyectar o recuperar el servicio de caché correctamente.
use Psr\SimpleCache\CacheInterface; // Interfaz estándar para operaciones de caché simples
public function getCachedDataOptimized(): array
{
/** @var CacheInterface $cacheService */
$cacheService = $this->container->get('prestashop.cache');
$cacheKey = 'my_module_specific_data';
$cachedData = $cacheService->get($cacheKey);
if ($cachedData === null) { // Importante verificar si es null o false
2. Scripts JavaScript y CCC (Combinar, Comprimir y Caché):
La función CCC, especialmente la de JavaScript, a menudo puede causar problemas con scripts de terceros. Esto se debe a varias razones:
- Orden de ejecución: CCC puede alterar el orden en que se cargan los scripts.
- Minificación: Si un script ya está minificado, una segunda minificación puede corromperlo.
- Sintaxis no estándar: Algunos scripts usan sintaxis que los compresores de PrestaShop no manejan bien.
Soluciones:
- Desactivar CCC para JS: La forma más rápida es ir a
Parámetros avanzados > Rendimiento y desactivar solo la opción Combinar, comprimir y cachear los archivos JavaScript.
- Excluir scripts específicos: Si sabes qué scripts dan problemas, puedes intentar modificar la forma en que se cargan en tu tema (ej.
theme.yml si usas ese método para assets) o en el módulo que los añade, para que no pasen por el proceso de CCC. A veces, simplemente mover la carga del script al footer o usar defer puede ayudar, pero CCC complica esto.
Revisa esos puntos y seguramente encontraremos la solución.