Optimiza tus desarrollos en Magento con cachés personalizadas

por David Abad
Cache personalizada en Magento

Magento utiliza diversos tipos de caché de datos para mejorar los tiempos de procesamiento y respuesta, facilitando también la creación de cachés personalizadas para optimizar nuestros desarrollos, obteniendo una mayor velocidad de carga y una mejor experiencia de usuario.

Cómo funciona la caché de Magento

Magento cuenta con diferentes tipos de caché predeterminadas (configuraciones, layouts, bloques, html, etc.) pensadas para mejorar el rendimiento del sistema y la velocidad de carga. 

El objetivo de estas cachés consiste en almacenar los datos costosos de obtener. De modo que, cuando se vuelvan a utilizar, puedan obtenerse de modo eficiente desde estas cachés, sin necesidad de calcularse de nuevo.

Las cachés disponibles pueden consultarse y gestionarse desde el administrador de Magento (System > Tools > Cache Management) o desde los comandos disponibles: 

Magento: Cache Management

Consultar estado de cachés disponibles

bin/magento cache:status

Limpiar caché:

  • Si no se indican cachés específicas, se limpiaran todas. 
bin/magento cache:clean
bin/magento cache:flush

Habilitar/deshabilitar caché:

  • Si no se indican cachés específicas, se habilitarán/deshabilitarán todas. 
bin/magento cache:enable
bin/magento cache:disable

Crear caché personalizada

Magento facilita la ampliación de su sistema de caché de datos, incluyendo nuevos tipos de caché. De este modo, si trabajamos con tareas que utilizan datos costosos de obtener, podemos desarrollar una nueva caché que permita trabajar de forma eficiente con esta información.

1. Crear fichero <Módulo>/etc/cache.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Cache/etc/cache.xsd">
    <type name="mi-cache" translate="label,description" instance="MiVendor\MiModulo\Model\Cache\Type">
        <label>Mi cache</label>
        <description>Mi cache personalizada</description>
    </type>
</config>
2. Crear clase <Módulo>/Model/Cache/Type.php
<?php

namespace MiVendor\MiModulo\Model\Cache;

use Magento\Framework\App\CacheInterface;
use Magento\Framework\Serialize\SerializerInterface;
use Magento\Framework\App\Cache\Type\FrontendPool;

class Type extends \Magento\Framework\Cache\Frontend\Decorator\TagScope
{
    public const TYPE_IDENTIFIER = 'mi-cache';
    public const CACHE_TAG = 'MI-CACHE';
    public const CACHE_EXPIRATION = 86400;
    
    private CacheInterface $cache;
    private SerializerInterface $serializer;
    
    public function __construct(
        CacheInterface $cache,
        SerializerInterface $serializer,
        FrontendPool $cacheFrontendPool
    ){
        $this->cache = $cache;
        $this->serializer = $serializer;
        parent::__construct(    
            $cacheFrontendPool->get(self::TYPE_IDENTIFIER), self::CACHE_TAG
        );
    }
    
    public function read(string $key): array
    {
        return $this->serializer->unserialize($this->cache->load($key));
    }
    
    public function write(string $key, array $data): void
    {
        $this->cache->save(
            $this->serializer->serialize($data),
            $key,
            [self::CACHE_TAG],
            self::CACHE_EXPIRATION
        );
    }
}
3. Habilitar y utilizar la nueva caché personalizada

Una vez creados los ficheros anteriores y lanzar un bin/magento setup:upgrade, el nuevo tipo de caché personalizada será listada desde el propio administrador de Magento, donde podremos habilitarla:

Magento: Cache personalizada

Tras habilitar la caché, podremos leer y escribir datos a través de las funciones implementadas:

  • Leer datos: \MiVendor\MiModulo\Model\Cache::read()
  • Escribir datos: \MiVendor\MiModulo\Model\Cache::write()

Al superar el tiempo de expiración definido (en este caso: 86400 segundos = 1 día), los datos cacheados quedarán invalidados y deberán volverse a obtener y almacenar.

Otras formas de mejorar el rendimiento

Crear una caché de datos personalizada puede mejorar notablemente el rendimiento de nuestro sistema Magento. Pero existen otras técnicas para optimizar nuestros procesos y agilizar el sistema, como crear indexadores de datos personalizados:

Magento Indexer
CREAR INDEXADOR PERSONALIZADO EN MAGENTO

Los indexadores permiten mejorar el rendimiento de un sistema Magento mediante el preprocesamiento de los datos más costosos de obtener. De modo que cuando el sistema necesite consumir esta información, ya se encontrará disponible en una estructura de datos óptima y eficiente.

Déjanos tu email para recibir contenido interesante en tu bandeja de entrada, cada mes.

¡No hacemos spam!

Otros artículos