web-dev-qa-db-fra.com

Existe-t-il un équivalent de l'API Drupal Batch dans WordPress?

Je me demande s'il existe une sorte d'équivalent à l'API Batch de Drupal dans WordPress?

Fondamentalement, l'API vous permet d'enregistrer une demande de traitement par lots et Drupal appellera votre fonction encore et encore (avec des demandes Ajax) jusqu'à la fin de votre traitement. Ainsi, si vous devez effectuer une mise à jour compliquée sur 1 000 000 articles, vous pouvez le faire en lot sans que le délai d’attente de PHP ne soit saturé. (Il vous suffit d'indiquer à Drupal votre cheminement et la mise à jour de la barre de progression pour l'utilisateur, etc.)

J'ai besoin de faire quelque chose de similaire dans WordPress (effectuer un énorme lot sur le backend de WordPress sans la ligne de commande). Comment voulez-vous accomplir cela?

2
David Barratt

Non, il n'y a pas une telle API, mais si vous en voulez une, vous pouvez:

  • Construisez-le vous-même
  • Ouvrir un ticket sur WP Core Trac

Mais, mis à part cela, si vous devez supprimer, créer ou mettre à jour 1 million de publications ou quelque chose de ce type, le faire via l'interface n'est pas une bonne chose, même avec une barre de progression optimisée AJAX.

Les plugins tiers ont en effet implémenté des choses similaires à celles-ci, mais pas de manière super générique. Il n'y a pas de plug-in "demande de batch générique en batch". Un exemple serait les plugins de régénération de vignettes.

À l'avenir, il sera peut-être préférable d'utiliser la prochaine API REST pour traiter vos demandes. Vous pouvez ensuite faire vos demandes javascript et modifier les publications par lots ou 1 par 1, et mettre en œuvre votre barre de progression.

En tant que développeur ayant travaillé avec l'hébergement géré WordPress

Je doute que WP Engine en soit satisfait, pas plus que votre client (1 million de demandes de mise à jour de messages, 1 million de visites, ce qui représente beaucoup de visites sur un service qui utilise les visites pour déterminer les tarifs). Donc, ce que vous proposez risque de coûter assez cher en termes de prix, à savoir 1 $ par tranche de 1 000 hits sur les prix excédentaires, je doute que votre client soit satisfait

Ainsi, sauf si vous êtes sur le package d'entreprise WP Engine avec des millions de réponses, vous pourriez être:

  • Affaires! 400 000 hits, 600 000/1000 = 600 USD pour le premier million supprimé + 1 000 USD pour chaque million supplémentaire, + trafic/1000
  • Professionnel! 100 000 hits, 900 000/1000 = 900 USD pour le premier million supprimé + 1 000 USD pour chaque million supplémentaire, + trafic/1000
  • Personnel! 25k hits, 975 000/1000 = 900 USD pour le premier million supprimé + 1 000 USD pour chaque million supplémentaire, + trafic/1000

Cela peut coûter plus ou moins cher sur d'autres services WordPress gérés, mais cela reste une proposition risquée, surtout si cela ne fonctionne pas correctement la première fois et que vous devez répéter le processus.

Mais même si vous ignorez les prix, il y a beaucoup de demandes, et les demandes prennent du temps. Même si cela prend un peu de temps, cela s’ajoute. Votre barre de progression attendra un moment ...

Ce que je ferais

Au lieu de cela, il serait préférable d'extraire le site localement, d'exécuter vos commandes à l'aide de WP CLI, puis de télécharger la nouvelle base de données. Vous avez un dépôt Git avec votre code, vous avez un accès SFTP, vous avez PHPMyAdmin pour la base de données, cela peut être fait. Même la majorité des hôtes partagés à 1 million de dollars fournissent ces installations.

Vous n'avez pas besoin d'un accès SSH lorsque vous pouvez l'installer dans un environnement totalement sous votre contrôle, et le téléchargement sera plus rapide que des centaines de milliers de requêtes AJAX.

En prime, vous obtenez gratuitement une copie à jour du contenu en direct!

2
Tom J Nowell

Je ne sais pas pourquoi vous voudriez même faire quelque chose comme ça. Supposons qu'un temps de ping sur le serveur est de 100 ms (le mien est généralement pire), cela signifie qu'avec un simple AJAX qui envoie, attend la réponse puis envoie à nouveau, les requêtes 1M prendront 100 000 secondes - plus que un jour. si vous pouvez en envoyer 10 à chaque fois, vous le réduirez à environ 3 heures mais vous ferez essentiellement un DOS contre le site.

Le seul point que je peux voir en faisant quelque chose comme ça dans AJAX est d'avoir un humain surveillant ce qui se passe et de gérer les événements inattendus, mais lorsque le processus prend plus d'une heure, personne ne voudra l'utiliser genre de méthode.

La bonne façon de gérer un tel besoin est d'utiliser le wordpress cron. Faites un lot et planifiez immédiatement un événement pour exécuter le prochain. Ce sera beaucoup plus rapide sans aucune exigence déraisonnable d'exécution PHP ou de mémoire si vous écrivez correctement le processus.

2
Mark Kaplun