Cache d'objets + Chargement par lots — Performance Entreprise | Field Forge - Champs personnalisés, conçus pour la vitesse
Télécharger Se connecter

Cache d’objets + Chargement par lots — Performance Entreprise

Principes de base du cache d’objets WordPress

Les fonctions wp_cache_* de WordPress fournissent une couche de mise en cache qui se situe entre votre code et la base de données. Par défaut, WordPress utilise un cache en mémoire par requête (effacé à la fin de chaque requête). Avec un backend de cache d’objets persistant comme Redis ou Memcached, le cache survit entre les requêtes — les pages vues suivantes accèdent au cache au lieu de la base de données.

Sur un site à fort trafic avec Redis :

  • Première page vue : récupère depuis la base de données, stocke dans Redis
  • Deuxième page vue (mêmes données) : accède à Redis, saute complètement la base de données
  • Troisième page vue : accède à Redis

Pour des charges de travail lourdes en lecture, cela représente une amélioration de performance de 10 à 100 fois.

Field Forge et cache d’objets

Chaque valeur de champ lue dans Field Forge passe par le cache d’objets :

“`php // À l’intérieur de l’implémentation de get_field() de Field Forge (simplifié) $cached = wp_cache_get($cache_key, ‘fieldforge’); if ($cached !== false) { return $cached; }

$value = $this->fetch_from_database($post_id, $field_name); wp_cache_set($cache_key, $value, ‘fieldforge’, 3600); return $value; “`

  • Format de clé de cachefieldforge:{post_id}:{field_name}
  • Groupe de cachefieldforge (séparé des autres plugins)
  • Expiration — 1 heure par défaut, configurable via filtre
  • Gestion des échecs de cache — passe à la requête de base de données, puis met en cache le résultat

Invalidation du cache

Lorsqu’une valeur de champ est mise à jour ou supprimée, Field Forge invalide automatiquement les entrées de cache pertinentes :

php // À l'intérieur de update_field() (simplifié) $this->save_to_database($post_id, $field_name, $value); wp_cache_delete("fieldforge:{$post_id}:{$field_name}", 'fieldforge');

L’invalidation est :

  • Immédiate — lors de l’enregistrement, l’ancienne entrée de cache est supprimée
  • Précise — seul le cache du champ spécifique est invalidé, pas celui de l’ensemble du post
  • Accrochée — les plugins peuvent ajouter une logique d’invalidation personnalisée via le hook fieldforge/cache/invalidate

Backends de cache pris en charge

Field Forge fonctionne avec n’importe quel backend de cache d’objets WordPress :

Redis

Le plus courant pour l’hébergement WordPress géré. Plugins gratuits : “Redis Object Cache” ou “W3 Total Cache” avec Redis activé. Fournit un cache persistant entre les requêtes.

Memcached

Plus ancien mais toujours pris en charge. Plugins : “Memcached” ou “W3 Total Cache.”

APCu

Mise en cache sur un seul serveur qui est plus rapide que Redis/Memcached pour les sites à faible trafic (pas de saut réseau). Plugins : “APCu Object Cache.”

Cache en mémoire par défaut

Si aucun backend de cache d’objets persistant n’est installé, Field Forge revient au cache par défaut de WordPress en requête. La mise en cache se produit toujours dans une seule page vue, mais pas entre les requêtes. Fonctionne partout, zéro configuration.

Chargement par lots

Pour les pages d’archive et les vues de liste où vous rendez de nombreux posts à la fois, Field Forge fournit une API batch_load() qui récupère des champs personnalisés pour plusieurs posts dans une seule requête SQL :

“`php $post_ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; FieldForge::batch_load($post_ids);

// Tous les appels get_field() suivants sur ces ID de post accèdent au cache foreach ($post_ids as $id) { $hero_title = get_field(‘hero_title’, $id); // Accès au cache $hero_image = get_field(‘hero_image’, $id); // Accès au cache } “`

Sans batch_load(), ce qui précède déclencherait 20 requêtes SQL séparées (10 posts × 2 champs chacun). Avec le chargement par lots, c’est 1 requête.

Préchargement automatique

Field Forge s’accroche au filtre the_posts de WordPress pour exécuter le chargement par lots automatiquement sur toute requête qui renvoie plusieurs posts :

php // Hook interne de Field Forge add_filter('the_posts', function($posts) { if (!empty($posts)) { $post_ids = wp_list_pluck($posts, 'ID'); FieldForge::batch_load($post_ids); } return $posts; });

Les pages d’archive, les résultats de recherche, les listes de catégories et les points de terminaison de liste de l’API REST en bénéficient automatiquement. Aucun changement de code nécessaire dans votre thème.

Chargement par lots explicite pour des requêtes personnalisées

Pour les appels WP_Query dans des modèles personnalisés, vous pouvez charger explicitement par lots après la requête :

“`php $query = new WP_Query([ ‘post_type’ => ‘product’, ‘posts_per_page’ => 30, ‘category_name’ => ‘featured’, ]);

// Chargement par lots des champs personnalisés pour les 30 produits en une seule requête if ($query->have_posts()) { $post_ids = wp_list_pluck($query->posts, ‘ID’); FieldForge::batch_load($post_ids); }

// Maintenant, le rendu de la boucle est uniquement un accès au cache while ($query->have_posts()) : $query->the_post(); $price = get_field(‘price’); // Accès au cache $sku = get_field(‘sku’); // Accès au cache $features = get_field(‘features’); // Accès au cache endwhile; “`

Comparaison de performance

Sur un site de test avec 10 000 posts, 15 champs personnalisés par post :

Sans cache d’objets

Action Temps
Page vue d’un seul post 45ms requêtes de champs personnalisés
Archive (20 posts) 840ms requêtes de champs personnalisés (N+1)
Catégorie WooCommerce (30 produits) 1 260ms

Avec cache d’objets Redis (cache chaud)

Action Temps
Page vue d’un seul post 3ms (accès au cache)
Archive (20 posts) 12ms (accès au cache)
Catégorie WooCommerce (30 produits) 18ms

Avec cache d’objets Redis + batch_load sur cache froid

Action Temps
Page vue d’un seul post 12ms (1 requête + remplissage du cache)
Archive (20 posts) 95ms (1 requête par lot + remplissage du cache)
Catégorie WooCommerce (30 produits) 142ms (1 requête par lot + remplissage du cache)

La combinaison du cache d’objets et du chargement par lots est spectaculaire sur les sites à fort trafic.

Surveillance de la performance du cache

Field Forge fournit des commandes WP-CLI pour surveiller la performance du cache :

“`bash

Afficher les statistiques du cache

wp fieldforge cache stats

Sortie :

Accès au cache : 94,3%

Échecs de cache : 5,7%

Temps moyen d’accès : 0,2ms

Temps moyen d’échec : 8ms

“`

Pour les sites où le taux d’accès au cache est faible (en dessous de 80 %), enquêtez :

  • Le backend de cache persistant fonctionne-t-il réellement ?
  • L’invalidation du cache est-elle trop agressive (effacement à chaque enregistrement) ?
  • Les types de posts / groupes de champs sont-ils configurés correctement ?

Personnalisation des filtres

Changer l’expiration du cache

php add_filter('fieldforge/cache/expiration', function($seconds) { return DAY_IN_SECONDS; // Cache pour 24 heures });

Désactiver la mise en cache pour des groupes de champs spécifiques

php add_filter('fieldforge/cache/should_cache', function($should_cache, $field_group) { if ($field_group === 'frequently-changing-group') { return false; } return $should_cache; }, 10, 2);

Logique d’invalidation personnalisée

php add_action('fieldforge/cache/invalidate', function($post_id, $field_name) { // Invalider également les données connexes wp_cache_delete("my_custom_cache:{$post_id}", 'my_plugin'); }, 10, 2);


Prêt pour des performances de champs personnalisés de niveau entreprise ?

Obtenez Field Forge — à partir de 35$/an →

L’intégration du cache d’objets et le chargement par lots sont présents dans chaque version de Field Forge, y compris la version gratuite.

Assistant IA Forge En ligne

Bonjour ! Je suis l'assistant IA Field Forge. Posez-moi n'importe quelle question sur le plugin — configuration, fonctionnalités, dépannage ou développement.

À l'instant
Propulsé par Forge IA · Parcourir la documentation