Cea mai bună practică pentru stocarea datelor agregate după dată sau alte criterii

2 mar. 2024, 19:21:08
Vizualizări: 38
Voturi: 0

Am creat descrieri rezumative pe ani. Pentru a face acest lucru, folosesc update_post_meta la salvare pentru a seta valori pentru numărul de cuvinte, numărul de imagini, numărul de link-uri externe.

Deci, pentru o pagină de arhivă pe ani, parcurg fiecare articol pentru a crea sume și apoi formaterez rezultatul.

Cu cache-ul activat, pot fi sigur că servesc utilizatorilor rezultate din cache.

Dar în timpul dezvoltării, cu cache-ul activat, observ încetinirea.

M-am gândit să folosesc un mecanism de tip cron pentru a crea rezumatele HTML într-un subdirector al folderului wp-content sau ca elemente wp_object_cache cu nume precum summary-YYYY.html pentru rezumat sau summary-YYYY.json.

Întrebarea mea:

Care sunt opțiunile mele pentru stocarea unor astfel de date? Există bune practici pentru denumirea cheilor în cache-ul de obiecte? Există alte modalități de a asocia date arbitrare cu un an?

0
Toate răspunsurile la întrebare 1
0

Am decis să folosesc wp_cache_set și wp_cache_get care par să funcționeze bine. Creez o cheie bazată pe clasă, funcție și parametri:

$cacheKey = self::createCacheKey( __CLASS__, __FUNCTION__, $referenceYear, $referenceMonth );

createCacheKey() arată astfel:

protected static function createCacheKey( ...$args ): string {
    return implode('-', $args);
}

Și am grijă să folosesc o expirare adecvată. Pentru datele care nu sunt din anul sau luna curentă am setat perioade mai lung de expirare.

Obținerea și returnarea cache-ului arată astfel la începutul unei funcții:

    $cacheKey = self::createCacheKey( __CLASS__,
                                      __FUNCTION__,
                                      $referenceYear, 
                                      $referenceMonth );
    $cache    = wp_cache_get( $cacheKey, self::CACHE_GROUP );
    if ( $cache ) {
        return $cache;
    }

Iar la sfârșitul acestor funcții folosesc:

    wp_cache_set( $cacheKey, $output, 
                  self::CACHE_GROUP, $cacheExpiration );

Se pare că face ceea ce doresc și îmbunătățește performanța, deși locul implicit unde sunt stocate lucrurile și cât de fiabil este acest lucru depinde de configurația serverului.

4 mar. 2024 07:19:51