web-dev-qa-db-fra.com

La mise en cache des menus WordPress doit-elle être spécifique à chaque page?

Introduction

En optimisant les performances des sites Web WordPress volumineux, je cherche toujours à mettre en cache certaines parties du site Web, principalement (bien sûr) celles qui nécessitent beaucoup de requêtes/calculs.

Pour la mise en cache du menu WordPress, j'utilise généralement une fonction comme celle que j'ai postée comme réponse ici .

Cette fonction vérifie s'il existe un transitoire contenant le menu HTML et, s'il existe, fournit le code HTML du transitoire. S'il n'existe pas, le menu est construit et l'ensemble transitoire. Pour être propre, j'accroche également à wp_update_nav_menu pour nettoyer le transitoire dès que le menu est enregistré, afin de toujours avoir la dernière version disponible.

Jusqu'ici tout va bien.

Cette technique fonctionne très bien et améliore considérablement les performances, surtout si le menu contient beaucoup d'entrées.

Le problème

Quelques mois après avoir développé cette méthode, je me suis heurté à un problème et je me sens stupide de ne pas y penser.

Les menus sont différents sur différentes pages

En fonction de la page appelée, wp_nav_menu fournit un code HTML différent. current-menu-item et des classes comme celles-là s’appliquent bien sûr aux menus.

Le problème est donc de savoir quel est le meilleur moyen de mettre en cache les menus tout en conservant les classes correctes disponibles pour chaque page spécifique.

J'ai pensé à deux versions

  • ajouter les classes via jQuery, ce qui entraîne plus de calcul sur le côté client
  • la mise en cache des menus pour chaque ID séparément, ce qui entraîne un certain chargement de base de données, si la page contient beaucoup de menus

Cependant, j'ai tendance à utiliser la deuxième option. Avez-vous des problèmes avec la mise en cache autant de HTML que de Transit?

3
fischi

Il n’existe pas de solution générique à ce problème: le même menu peut être affiché avec des lecteurs différents sur des pages différentes, ou des plugins modifient le menu sur certaines pages.

Vous pouvez étendre votre script pour évaluer les différences en un menu vierge et créer le code JavaScript nécessaire à la volée… et le mettre en cache également… pour chaque page.

Je ne pense pas que cela en vaille la peine. obtenir tous les cas Edge est un travail difficile, et le menu serait toujours différent pour les utilisateurs sans JavaScript (moteurs de recherche, erreurs de script non résolues, etc.).

1
fuxia