J'utilise le PHP suivant: Code Sniffs sur du code WordPress, et l'avertissement suivant apparaît
352 | WARNING | get_posts is discouraged in favor of creating a new
| | WP_Query() so that Advanced Post Cache will cache
| | the query, unless you explicitly supply
| | suppress_filters => false.
Bien que je sois un programmeur expérimenté, je ne connais pas très bien l’histoire de WordPress. Cet avertissement semble important, mais son libellé est maladroit. Je suis confus sur quelques points et d'autres réponses j'ai trouvé sur le sujet ne semblent pas répondre à mes points.
Qu'est ce que le "Advanced Post Cache"? Je sais que WordPress (comme beaucoup d'applications PHP) gère la mise en cache à différents niveaux.
Cet avertissement me dit-il que get_posts
n'utilisera jamais le cache, mais WP_Query
l'utilisera?
Cet avertissement me dit-il que l'utilisation de suppress_filters
avec WP_Query
contournera le cache de publication avancée? Ou que l'utilisation de suppress_filters
avec get_posts
appellera le cache? Ou autre chose?
Que fait d'autre suppress_filters
?
Si quelqu'un de plus familier avec le sujet pouvait trouver des indices dans un newb WordPress, je l'apprécierais. Je ne cherche pas une réponse du type "toujours utiliser X, ou ne jamais utiliser Y" - j'essaie de comprendre les compromis de chaque approche.
Ceci est directement lié à, et une conséquence de WordPress.com VIP
Chez VIP, nous traitons avec des sites qui comptent des centaines de millions de pages vues par semaine. En conséquence, les situations qui peuvent ralentir votre site sont beaucoup plus perceptibles à cette échelle que sur un petit hôte partagé, mais cela affecte tout de même un site avec un trafic modéré de l’ordre de 100 utilisateurs environ sur un VPS décent. Nous vérifions également tout le code avant qu'un code d'agence n'arrive en production
get_posts
en particulier ne cache pas ses résultats. Si vous effectuez le même appel get_posts
cinq fois, la base de données sera enregistrée cinq fois, au lieu d’enregistrer le résultat pour plus tard. WP_Query
ne le fait pas, et la mise en cache y est bien meilleure, ainsi que d'autres optimisations qui ne sont pas possibles dans get_posts
en raison de la façon dont elle renvoie la publication entièrement formée.
Il existe un moyen de faire en sorte que get_posts
mette en cache les résultats. Cependant, l'option suppress_filters
est true par défaut, mais si vous le définissez sur false, les mécanismes de mise en cache de WordPress fonctionnent et les résultats sont sauvegardés pour plus tard.
En ce qui concerne l'endroit où ils sont stockés, il existe un système de mise en cache des objets appelé WP_Cache
. Par défaut, cela stockera tout ce que vous y avez mis et le gardera (n'allez pas implémenter votre propre cache pour éviter que le travail ne soit effectué plusieurs fois dans un chargement de page, WP vous a couvert!) .
Cependant, il existe des plugins qui fournissent advanced-cache.php
ou object-cache.php
, WP_Cache
peut être rendu persistant. Par exemple, batcache
obligera WP_Cache
à utiliser memcached
pour stocker des éléments, en laissant les données persistantes entre les chargements de page, ce qui améliorera considérablement les performances. Il existe des plugins similaires pour Redis/memcache/etc
Je vous recommande de consulter https://vip.wordpress.com/documentation/ , dont certaines sont spécifiques à la plate-forme WordPress.com VIP, mais d'autres sont importantes pour la performance et la sécurité. . Il existe également un outil de scanner VIP qui détecte d'autres éléments, tels que l'utilisation de fonctions non mises en cache.