Je views_get_view_result()
pour obtenir des résultats d'une vue parce qu'il était pratique à ce moment - là. Le résultat de la requête change rarement; Je pourrais utiliser la mise en cache des vues pendant 6 jours.
Si je voulais le convertir en appel, db_query()
comment pourrais-je activer la mise en cache?
db_query()
, et avoir à mettre en cache la valeur de$results->fetchAll()
et non$results
est la clé pour que cela fonctionne réellement.Je ne pense pas que la couche DB ait un mécanisme de mise en cache intégré (bien que je puisse me tromper), mais vous pouvez utiliser l'API de cache par défaut.
Ceci est juste un exemple de base qui mettra en cache les résultats d'une requête pour obtenir des nœuds d'un certain type:
la source
En plus du mécanisme cache_set / cache_get standard fourni par Drupal, si vous utilisez MySQL comme base de données, vous pouvez activer le cache de requêtes , qui peut mettre en cache les résultats des vues ou toute autre requête de base de données de manière transparente. mysqltuner peut aider à trouver de bonnes valeurs pour la taille du cache.
Notez simplement que si vous écrivez beaucoup dans la base de données, la mise en cache des requêtes devient moins efficace en raison du fonctionnement de la stratégie d'invalidation du cache (une écriture dans une table invalide toutes les entrées qui SELECTIONNENT OU JOIGNENT à cette table).
Il existe également un mécanisme de mise en cache pour PostgreSQL , mais je n'ai pas d'expérience directe avec lui.
la source
J'ai récemment découvert le module Actions de cache . Avec ce module, vous pouvez définir la mise en cache de votre vue sur Cache déclenché par des règles et créer une règle pour invalider le cache sur des vues et des affichages spécifiques.
Par exemple, le cache d'une vue qui répertorie les nœuds d'un type de contenu spécifique peut être vidé lorsqu'un nouveau nœud est créé de ce type de contenu.
la source