Mi tienda Prestashop carga lenta de un día para otro sin haber hecho cambios

En muchas ocasiones algunos clientes nos han reportado problemas de lentitud en sus tiendas Prestashop de un día para otro sin haber hecho cambios. Hay que tener en cuenta que la mayoría de módulos y plantillas realizan conexiones a la web oficial del desarrollador para validar licencias, comprobar actualizaciones, etc.

Esas conexiones se realizan en todo momento, incluido el front-end, por lo que esas conexiones se realizan cuando nuestros usuarios o clientes están visitando nuestro sitio web. Por lo tanto, si la web de alguno de los desarrolladores de nuestros módulos o plantillas tiene alguna incidencia, el rendimiento de nuestro sitio web se verá afectado considerablemente.

Si el tiempo de respuesta de nuestro sitio web es 0.5 segundos, pero la conexión a la web del desarrollador se demora 5 segundos, nuestro sitio tardará 5.5 segundos en responder. Hasta que nuestra tienda no haya completado todas las conexiones externas definidas en los módulos, nuestra página web no mostrará nada y se quedará cargando.

En el siguiente ejemplo, un cliente nos reporta problemas de lentitud en su sitio web, y efectivamente la página no ha sido modificada desde hace semanas. Analizando los procesos identificamos esta conexión:

php-fpm xxxxx xxxxxx 6u IPv6 2206060903 0t0 TCP linxxx.loading.es:58876->[2606:4700:30::xxxx:xxxx]:http (SYN_SENT)

El proceso php-fpm permanece bloqueado durante cerca de 60 segundos realizando esa conexión ya que el servidor de destino (2606:4700:30::xxxx:xxxx) no responde correctamente, por lo que la carga del sitio web se demora más de 60 segundos. Analizando la plantilla y módulos usados, conseguimos identificar a que módulo hace referencia esa dirección IP:

/modules/pk_themesettings/

Después de revisar el código fuente del módulo, detectamos que el problema es de la plantilla/módulo, buscando actualizaciones:

/modules/pk_themesettings/inc/confighelper.php

public function checkupdates() {
    $update_list = "http://promokit.eu/share/updates/"._THEME_NAME_."/5/update_list.dat";
    $msg = "";
    if (!$update = @file_get_contents($update_list)) {
        $msg = false;
    } else {
        $versions = explode(",", $update);
        $i = 1;
        foreach ($versions as $key => $version) {
            if (Configuration::get('ALYSUM_VER') < $version) {
                $msg .= (($i == 1) ? "" : ",").$version;
                $i++;
            }
        }
    }

    return $msg;
}

Por lo que comentamos las lineas que realizan la conexión a la web oficial del desarrollador, quedando así:

public function checkupdates() {
    /*
    $update_list = "http://promokit.eu/share/updates/"._THEME_NAME_."/5/update_list.dat";
    $msg = "";
    if (!$update = @file_get_contents($update_list)) {
        $msg = false;
    } else {
        $versions = explode(",", $update);
        $i = 1;
        foreach ($versions as $key => $version) {
            if (Configuration::get('ALYSUM_VER') < $version) {
                $msg .= (($i == 1) ? "" : ",").$version;
                $i++;
            }
        }
    }

    return $msg;
    */
}

De este modo la página web del cliente no volverá a generar problemas de lentitud buscando actualizaciones de la plantilla. No obstante, puede que tenga otros módulos o plantillas que sigan realizando conexiones de este tipo.

Normalmente cuando la web del desarrollador funcione correctamente no detectaremos ningún problema, aunque hay que tener en cuenta la importancia de usar los módulos 100% necesarios e imprescindibles. Cada conexión cuenta, si por ejemplo tenemos 10 módulos que buscan actualizaciones, y cada conexión se demora 0.10 segundos, estamos generando 1 segundo (10 x 0.10) de carga adicional a nuestro sitio web.

Al hacer un uso abusivo de módulos, tenemos mayor probabilidad de sufrir estos problemas. Aunque los módulos no estén activos, el hecho de estar instalados ya ocasiona que Prestashop tenga que leer su código fuente y realizar las conexiones correspondientes. Por lo que es recomendable eliminar los módulos que estén en desuso y hacer un uso moderado de ellos.

Visto esto, dependemos al 100% de la web de los desarrolladores de nuestros módulos y plantillas.

Deja un comentario

Tu dirección de correo electrónico no será publicada.