Nous avons remarqué des temps de chargement très longs lors de la modification d'un article ou d'une page. En utilisant Query Monitor, nous avons constaté que cette requête de base WP prend jusqu'à 15-20 secondes.
SELECT meta_key
FROM wp_postmeta
GROUP BY meta_key
HAVING meta_key NOT LIKE '\\_%'
ORDER BY meta_key
LIMIT 30
caller:
meta_form()
post_custom_meta_box()
do_meta_boxes()
Nous utilisons beaucoup de postmeta car l'un de nos types de messages utilise environ 20 champs personnalisés. Je dirais que nous comptons peut-être trop sur postmeta, mais cela semble être une requête très inefficace, vu qu'il ne sélectionne même pas l'ID du message.
Est-ce un problème commun? Existe-t-il un moyen de désactiver cette fonction via un filtre? Merci pour toute contribution.
meta_form()
fonction et c'est bien la requête SQL générée à partir de cette fonction principale. Vous pouvez essayer d'ajouter votre propre métabox personnalisée avec des modifications au codemeta_form()
et d'y utiliser votre requête SQL suggérée. J'ai trouvé ce ticket trac fermé # 8561 . Vous pourriez peut-être créer un autre ticket ou essayer de rouvrir celui-ci? PS: Notez que la page parent qui sélectionne la métabox est également problématique. Si vous avez 1 million de pages, toutes s'afficheront comme options de sélection!meta_form()
fonction. J'ai mis à jour la réponse - la requête SQL principale a été ajustée dans WP version 4.3. Voyez-vous un gain de performances avec cette nouvelle requête SQL par rapport à notrepost_id
restriction supplémentaire ?Réponses:
Si vous souhaitez tester votre SQL personnalisé pour voir comment il affecte le temps de chargement, vous pouvez essayer l'échange de requêtes:
Ici, nous utilisons le
add_meta_boxes_{$post_type}
crochet, où$post_type = 'post'
.Ici, nous échangeons la requête entière, mais nous aurions également pu l'ajuster pour prendre en charge la limite dynamique.
J'espère que vous pourrez ajuster cela à vos besoins.
Mettre à jour:
Cette requête SQL potentiellement lente, a maintenant été ajustée dans WP version 4.3 à partir de
à:
Consultez le ticket principal # 24498 pour plus d'informations.
la source
Si vous parcourez le code source de la fonction, vous trouverez ceci:
En utilisant le
postmeta_form_keys
hook, vous pouvez spécifier manuellement les clés pour éviter d'appeler complètement cette requête inefficace:la source
Pouvez-vous essayer cela. Ce n'est pas une solution, mais une solution temporaire.
la source
La suppression des métaboxes empêche également la requête lente.
la source