Comment utiliser asynchrone PHP dans WordPress

Php exécute le Code en série, ce qui signifie qursquoil fonctionne pièce par pièce. Cela peut poser des problèmes lorsque avez besoin drsquoeffectuer beaucoup de traitement dans une session ou que dépendez drsquoun appel à une API externe. Dans je vais montrer comment résoudre ce problème en utilisant asynchrone PHP dans WordPress. Il nrsquoest pas rare que le serveur configure une limite de temps drsquoarrêt de 30 secondes pour chaque requête, ce qui limite le temps qursquoil faut à chaque session pour terminer son travail. Bien entendu, si ce traitement est nécessaire pour compléter la demande initiale, il est peu probable que lrsquoutilisateur final reste 30 secondes.
Récemment, jrsquoa i rencontré une situation où les besoins auxquels je dois faire face ne peuvent pas être gérés dans une seule demande. À cette fin, mon client a utilisé le module Lead pour activer trois demandes drsquoapi externes, dont une pour des services lents et peu fiables. De plus, ils veulent que les visiteurs du site aient accès à la page de remerciement le plus rapidement possible. Parce que je sais que je dois attendre une demande drsquoAPI, il y aura une page de remerciement qui prendra 20 secondes pour charger ou expirer. En raison du manque de fiabilité de l’api distante, il est nécessaire de sauvegarder les données dans wordpress pour rediriger et enregistrer l’état des demandes d’api si nécessaire, de sorte que la charge de travail requise ne peut pas être réalisée en 30 secondes. De plus, il nrsquoest pas possible drsquoenregistrer les données, de faire des demandes, de mettre à jour lrsquoétat de ces demandes et de rediriger lrsquoutilisateur vers la page de remerciement tant que lrsquoutilisateur nrsquoest pas frustré par la lenteur du chargement de la page. La réponse est drsquoenregistrer les données, drsquoutiliser asynchrone Task Manager pour programmer les tâches, puis de rediriger lrsquoutilisateur. Ensuite, chacune des trois requêtes API srsquoexécutera dans sa session respective et aura ses propres 30 secondes pour compl éter
Et nrsquoaffecte pas lrsquoexpérience utilisateur. Je peux également déplacer les données sauvegardées vers une tâche asynchrone, mais ce nrsquoest pas nécessaire.
Plusieurs gestionnaires de tâches asynchrones sont spécialement conçus pour WordPress, mais le meilleur et le plus facile à utiliser est WP async Task, un gestionnaire de tâches open source développé par techcrunch et développé par 10up. Pour utiliser les tâches asynchrones WP, devez utiliser des crochets drsquoaction. Cela peut se faire par crochet dans le noyau, par un autre plug in, ou par do _ action (). Habituellement, lorsque le crochet apparaît, connectez directement au crochet pour effectuer un certain processus de concaténation. Avec WP async, le traitement sur ce crochet sera reporté à une session ultérieure. Crsquoest très simple. Nous avons besoin drsquoun crochet, une classe avec une propriété et deux méthodes pour instancier la classe. Ensuite, nous devons accrocher le crochet généré par ce crochet. Le gestionnaire de tâches envoie une nouvelle demande post à WordPress et transmet ensuite les données du crochet original au nouveau crochet lors de la deuxième session, ce qui n’est généralement pas possible.
Question: Faites le une fois ou ne faites rien. Dans la section suivante, je guiderai tout au long du processus. Mais drsquoabord, regardons le type de code que nous allons Modifier pour gérer cette opération: ajouter _ action (lsquoSave postrsquo, lsquoJosh send to APIrsquo)
Fonction Josh _ send to API ($ID) {
$what = get _ post Meta ($ID,
$r = WP _ Safe Remote Post (ADD Query Arg (lsquoidrsquo, $thing, lsquo http:apiexample.com (lsquo)
(! Is _ WP Error ($r)
$Body = json u decode (wp u Remote u retirve u Body ($r))
(isset ($Body gt Key)
Mettre à jour _ post Meta ($ID, lsquoAPI Responsersquo, $Body gt Key)
Autres
Mettre à jour _ post Meta ($ID, lsquoAPI Response,rsquo none lsquo)
}
}
}
Le problème avec ce code est que le processus drsquoenregistrement des messages ne peut être terminé qursquoune fois la demande à lrsquoAPI distante terminée. Je vois.
La demande drsquoapi distante prend plus de temps que le temps drsquoarrêt du serveur et ne peut pas être remplie. Lrsquoenregistrement des messages, lrsquoenvoi de données à lrsquoAPI distante et lrsquoenregistrement des résultats en tant que métamessages ne devraient pas être un processus prudent. Au lieu de cela, nous pouvons laisser le post enregistrer correctement, puis récupérer les données dans la deuxième session PHP et enregistrer la réponse comme méta post. Il est très facile de le configurer en utilisant les tâches asynchrones WP, car tout le travail lourd est géré par la Bibliothèque elle même. Lrsquoimplémentation de cette bibliothèque nécessite une classe qui étend la classe de tâches WP _ async et fait trois choses simples.
Cette classe doit avoir une action de propriété protégée qui est le nom de lrsquoaction utilisée par cette tâche asynchrone. Dans ce cas, ce sera
* *
Action utilisée pour activer cette activité
* *
Chaîne variable
*
$action protégée =
} ensuite, nous avons besoin drsquoune méthode de sécurité appelée
Cette méthode passe un tableau de données contenant tous les paramètres du crochet. utilisez un crochet qui expose trois paramètres, le premier paramètre sera dans la clé 0, le second dans la clé 1, et ainsi de suite. Dans ce cas, nous avons juste besoin
Enregistrer _ Post le premier paramètre et lrsquoID du poste et lrsquoenvoyer à la session suivante. La méthode prepare _ Data forme les données post pour les sessions qui exécutent des tâches asynchrones. Tout le contenu requis pour cette session doit être retourné ou stocké dans la base de données prepare _ date. Voici les classes de mise à jour pour envoyer lrsquoID du message:
La classe Josh _ Task étend WP async Task {
* *
Action utilisée pour activer cette activité
* *
Chaîne variable
*
$action protégée =
* *
Préparer les données post à envoyer à la session qui traite la tâche
* *
@ Param Array $Data Parameters from Hook
* *
Retourner le tableau
*
Fonction protégée prepare _ Data ($Data) {
Matrice de retour
« post _ id» = gt $data [0]
)
}
} la troisième et dernière méthode de cette classe, run _ action, est une fonction protégée qui est utilisée pour exécuter une tâche. Cette méthode fonctionne dans une session autre que prepare _ date. Par conséquent, devez utiliser un post super global pour récupérer les données nécessaires à lrsquoexécution de la tâche. Heureusement, les données post sont définies dans prepare _ data.
Dans cette méthode, nous validons le post _ ID dans le post et le définissons comme un entier, auquel cas nous lrsquoutilisons pour activer une autre opération. Les auteurs de la tâche WP async recommandent drsquoutiliser WP _ async 3 comme préfixe. La classe Josh _ Task étend WP async Task {
* *
Action utilisée pour activer cette activité
* *
Chaîne variable
*
$action protégée =
* *
Préparer les données post à envoyer à la session qui traite la tâche
* *
@ Param Array $Data Parameters from Hook
* *
Retourner le tableau
*
Fonction protégée prepare _ Data ($Data) {
Matrice de retour
« post _ id» = gt $data [0]
)
}
* *
Exécuter des tâches asynchrones
* *
Appelez send _ to API ()
*
Fonctions protégées
Run _ operation () {
(isset ($u post [lsquopost _ idrsquo) amp amp 0 Action
}
}
}
Maintenant que la classe est en place, nous pouvons tout rassembler en quelques étapes simples. La première étape consiste à créer une instance drsquoune classe sur un plugins _ chargé ou plus tard. De toute évidence, une bibliothèque de tâches asynchrones WP doit exister et contenir avant cela. Je recommande de lrsquoinstaller via composer. Vous pouvez également lrsquoinstaller en tant que plug in, et je pense que crsquoest une mauvaise idée parce que les plug ins peuvent être désactivés. La deuxième chose que nous devons faire est de lier la nouvelle action qui est lancée dans la classe au rappel original. Voici à quoi il ressemble:
Ajouter _ action (lsquoWP async Save postrsquo, lsquoJosh send to APIrsquo)
Fonction Josh _ send to API ($ID) {
$what = get _ post Meta ($ID,
$r = WP _ Safe Remote Post (ADD Query Arg (lsquoidrsquo, $thing, lsquo http:apiexample.com (lsquo)
(! Is _ WP Error ($r)
$Body = json u decode (wp u Remote u retirve u Body ($r))
(isset ($Body gt Key)
Mettre à jour _ post Meta ($ID, lsquoAPI Responsersquo, $Body gt Key)
Autres
Mettre à jour _ post Meta ($ID, lsquoAPI Response,rsquo none lsquo)
}
}
Jrsquoespère que cet article aidera à comprendre pourquoi devez utiliser PHP asynchrone. Avec cet exemple pratique, devriez maintenant savoir comment le faire en utilisant le site WordPress normal. Même si PHP asynchrone utilise deux sessions, il est important drsquoutiliser PHP asynchrone parce que PHP 7 prendra en charge PHP asynchrone.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

ContactPress Supported By WordPress Plugins