Εκμεταλλευτήκαμε την ήρεμη περίοδο γύρω από τις διακοπές για να εργαστούμε σε ορισμένες τροποποιήσεις απόδοσης στο WP Fusion και καταλήξαμε σε μερικές αρκετά συναρπαστικές αλλαγές με το σύστημα webhooks.
Πρώτα μια ανακεφαλαίωση:
Τι είναι τα webhooks; Όταν κάτι αλλάζει σε μια εγγραφή επαφής στο CRM σας, όπως εφαρμόζεται μια ετικέτα ή επεξεργάζεται ένα πεδίο, συνήθως θέλετε αυτά τα δεδομένα να συγχρονιστούν ξανά με την εγγραφή χρήστη της επαφής στο WordPress.
Τα Webhook είναι ένας τρόπος για το CRM σας να λέει στο WP Fusion ότι κάτι έχει αλλάξει για μια επαφή (ή πρέπει να εισαχθεί νέος χρήστης). Υποστηρίζουμε webhook με τις περισσότερες πλατφόρμες, μπορείτε να δείτε τους διάφορους οδηγούς εγκατάστασης εδώ.
Πώς λειτουργούν αυτή τη στιγμή; Κάθε webhook περιέχει το αναγνωριστικό επαφής της ενημερωμένης επαφής στη διεύθυνση URL. Στη συνέχεια, το WP Fusion παίρνει αυτό το αναγνωριστικό και το χρησιμοποιεί για να συνδεθεί ξανά στο CRM και να φορτώσει τις ενημερωμένες ετικέτες ή/και προσαρμοσμένα πεδία.
Εάν έχει εισαχθεί νέος χρήστης, το WP Fusion συγχρονίζει επίσης το όνομα χρήστη και τον κωδικό πρόσβασης που δημιουργείται πίσω στο CRM σας, ώστε να μπορεί να σταλεί σε ένα email καλωσορίσματος.
Ποιο είναι το πρόβλημα? Το πρόβλημα είναι ότι όλα αυτά χρειάζονται χρόνος. Για να εισαγάγετε έναν νέο χρήστη, να δημιουργήσετε έναν κωδικό πρόσβασης και να τον συγχρονίσετε ξανά στο CRM σας, μπορεί να χρειαστούν 5 δευτερόλεπτα. Περισσότερο εάν το API είναι αργό.
Αυτό δεν είναι τόσο κακό για έναν μόνο χρήστη, αλλά μπορεί να προκαλέσει προβλήματα όταν έρχονται πολλά webhook ταυτόχρονα.
#Δοκιμές, δοκιμές….
Ας κάνουμε μια δοκιμή όπου προσπαθούμε να εισάγουμε 200 χρήστες (μέσω webhook) σε ένα λεπτό.
Αυτό προσομοιώνει κατά προσέγγιση τι συμβαίνει όταν μια δέσμη επαφών πραγματοποιεί ένα βήμα αυτοματισμού με ένα webhook ταυτόχρονα και είναι η πιο συνηθισμένη αιτία για τη μη δημιουργία λογαριασμών χρηστών / τη διακοπή συγχρονισμού των ετικετών.
Σημείωση Α: Όλες οι δοκιμές εκτελούνται σε διακομιστή Digital Ocean με μνήμη 2 Gb και μία CPU (βασική, φιλοξενία 12 $/ μήνα). Χωρίς προσωρινή αποθήκευση. Τα ενεργά πρόσθετα είναι τα Elementor, LearnDash, BuddyBoss και WooCommerce. Επομένως, αυτό είναι ένα αρκετά «χαμηλού επιπέδου» περιβάλλον όσον αφορά τους διαθέσιμους πόρους. Αυτού του είδους οι ρυθμίσεις είναι εκεί όπου οι πελάτες μας έχουν τα περισσότερα προβλήματα με τα webhook και το φόρτο διακομιστή.
Σημείωση Β: Για τη δοκιμή εισάγουμε τον νέο χρήστη και τις ετικέτες του από την καρτέλα επαφής ActiveCampaign, δημιουργούμε έναν κωδικό πρόσβασης και τον συγχρονίζουμε ξανά σε ένα προσαρμοσμένο πεδίο, εγγράφουμε τον χρήστη σε δύο μαθήματα LearnDash και εφαρμόζουμε μία ετικέτα „Εγγραφή μαθήματος“ για να υποδείξουμε την επιτυχή εισαγωγή.
#Δοκιμή 1 – Προεπιλεγμένα webhook
Αυτό είναι το προεπιλεγμένο τελικό σημείο webhook που ακολουθεί τον οδηγό μας για τα webhook ActiveCampaign. Για παράδειγμα https://mysite.com/?wpf_action=add&contact_id=123
.
Ο πρώτος χρήστης εισάγεται σε περίπου 5 δευτερόλεπτα. Αλλά καθώς έρχονται περισσότερα webhook, ο ιστότοπος αρχίζει να επιβραδύνεται υπό το φορτίο. Μέχρι τον 15ο χρήστη, ο ιστότοπος διαρκεί πλέον 10+ δευτερόλεπτα ανά webhook ☹️
Στη συνέχεια, ο ιστότοπος εξαντλείται από πόρους μετά από περίπου 30 δευτερόλεπτα και λαμβάνετε ένα σφάλμα „χρονικού ορίου πύλης“.
Σε αυτήν την περίπτωση, 42 από τους 200 χρήστες εισήχθησαν με επιτυχία. Οχι πολύ καλά! 😬
Οι κλήσεις API χρειάζονται χρόνο για να σταλούν. Συνήθως περίπου ένα δευτερόλεπτο το καθένα με την ActiveCampaign (σε μια καλή μέρα 😅). Σε αυτήν την περίπτωση, στέλνουμε 4 κλήσεις API ανά εισαγωγή, επομένως 5 δευτερόλεπτα ανά χρήστη είναι το καλύτερο που μπορούμε να ελπίζουμε.
Το πρόβλημα των πόρων προέρχεται από το γεγονός ότι η βασική φιλοξενία όπως αυτή μπορεί να επεξεργαστεί μόνο έναν συγκεκριμένο αριθμό ταυτόχρονων αιτημάτων ταυτόχρονα. Σε αυτή την περίπτωση μπορεί να αντέξει περίπου 30 πριν κολλήσει.
#Δοκιμή 2 – Κάνοντας τα webhook ασύγχρονα
Δεδομένου ότι οι κλήσεις API είναι το πιο αργό μέρος, ας προσπαθήσουμε να τις μεταφορτώσουμε σε μια ξεχωριστή διαδικασία.
Το WP Fusion διαθέτει ήδη ένα εργαλείο εισαγωγής που μπορεί να εισάγει λογαριασμούς χρηστών για χιλιάδες επαφές CRM. Αυτό το κάνει δουλεύοντας τους δίσκους έναν προς έναν, αντί για όλους ταυτόχρονα.
Μπορούμε να πάρουμε κάθε εισερχόμενο webhook και να προσθέσουμε το αναγνωριστικό επαφής σε μια ουρά εγγραφών που θα εισαχθούν από το εργαλείο εισαγωγής και, στη συνέχεια, να αποστείλουμε μια διαδικασία παρασκηνίου για να χειριστείτε την εισαγωγή ασύγχρονα. Στη συνέχεια, ο εργάτης παρασκηνίου θα εισαγάγει τις εγγραφές μία προς μία, όπως το επιτρέπουν οι πόροι.

Βελτιώνομαι! Καταφέραμε να χειριστούμε 173 από τα 200 αιτήματα σε ένα λεπτό, με μέσο χρόνο απόκρισης περίπου 7 δευτερόλεπτα.
Δεν κάναμε την εισαγωγή όλων, αλλά τουλάχιστον ο ιστότοπος δεν κατέρρευσε! 😌
Αυτή η εναλλακτική μέθοδος „ασυγχρονισμού“ υποστηρίζεται στο WP Fusion εδώ και μερικά χρόνια και έχει βοηθήσει πολύ σε ορισμένους πελάτες, αλλά θεωρήσαμε ότι έπρεπε να υπάρχει περιθώριο βελτίωσης.
#Δοκιμή 3 – Τροποποίηση της διαδικασίας παρασκηνίου
Ως μέρος αυτής της δοκιμής, συνειδητοποιήσαμε ότι κάθε φορά που προσθέταμε μια νέα εγγραφή στην ουρά εισαγωγής, δημιουργούσε μια νέα παρουσία του εργάτη στο παρασκήνιο για να χειριστεί την εισαγωγή — ακόμα κι αν μια εισαγωγή εκτελούνταν ήδη.
Το ξεπεράσαμε φτιάχνοντας μια απλή αλλαγή στο WP Background Processing έτσι ώστε ένα νέο ασύγχρονο αίτημα συνηθισμένος δημιουργηθεί εάν υπάρχει ένα υπάρχον κλείδωμα διεργασίας (δηλαδή η διαδικασία εκτελείται ήδη).
Με αυτήν την αλλαγή, το πρώτο webhook θα πρέπει να αποστείλει μια νέα διαδικασία παρασκηνίου, αλλά τα επόμενα webhook απλώς θα καταγράφονται στην ουρά εισαγωγής (εφόσον ο εισαγωγέας εξακολουθεί να εκτελείται).

Ουάου, τώρα μαγειρεύουμε με γκάζι 🔥
Και οι 200 χρήστες εισήχθησαν με επιτυχία, με μέσο χρόνο απόκρισης 516 ms 😘👌
Το πιο σημαντικό, οι χρόνοι απόκρισης παραμένουν σχετικά σταθεροί καθ‘ όλη τη διάρκεια της δοκιμής… που σημαίνει ότι ο ιστότοπος θα μπορούσε πιθανώς να αντέξει αυτό το επίπεδο δραστηριότητας για μια παρατεταμένη περίοδο, χωρίς να εξαντληθούν οι πόροι.
#Δοκιμή 4 – Τα πάντα εκτός από τον νεροχύτη της κουζίνας
Ο διαρκής χειρισμός webhook μισού δευτερολέπτου σε ένα βασικό πρόγραμμα φιλοξενίας είναι εξαιρετικός. Στο 99% των περιπτώσεων θα είναι αρκετά γρήγορο.
Αλλά έχουμε πελάτες με 100.000+ μέλη που κινούνται μέσω αυτοματισμών CRM, στέλνοντας webhook πίσω στον ιστότοπό τους όλη μέρα κάθε μέρα, και σε αυτές τις περιπτώσεις κάθε χιλιοστό του δευτερολέπτου μετράει.
Έχουμε ήδη εκφορτώσει τις κλήσεις API στον εργαζόμενο στο παρασκήνιο. Ποιο είναι το μεγαλύτερο εμπόδιο τώρα; Είναι WordPress.
Κάθε φορά που χτυπάμε https://mysite.com/?wpf_action=
πρέπει να φορτωθεί όλο το WordPress, το θέμα, όλα τα πρόσθετα, τυχόν καθυστερημένες εργασίες cron. Βασικά ένα ολόκληρο χάος από πράγματα που δεν χρειαζόμαστε πραγματικά.
Επειδή το μόνο που κάνουμε τώρα είναι να αποθηκεύουμε το αναγνωριστικό επαφής στην ουρά εισαγωγής, το μόνο που χρειαζόμαστε πραγματικά είναι πρόσβαση στη βάση δεδομένων. Αλλά, χωρίς να μπερδεύουμε με τους κανόνες .htaaccess και να ξαναγράψουμε, είναι κάπως δύσκολο να παρακάμψουμε την κανονική διαδικασία φόρτωσης του WordPress.
Δεδομένου ότι αυτό εισέρχεται στην περιοχή ακραίων κεφαλαίων, θα χρησιμοποιήσουμε μια λύση ακραίας θήκης. Το WP Fusion διατίθεται τώρα με ένα api.php
αρχείο μέσα στο φάκελο της προσθήκης. Μπορείς POST
συνδέει τον ιστό σας απευθείας σε αυτό το αρχείο και θα τα επικυρώσει και θα τα αποθηκεύσει απευθείας στη βάση δεδομένων, παρακάμπτοντας την κανονική διαδικασία φόρτωσης του WordPress (δείτε πώς λειτουργεί εδώ).
Ώρα να δοκιμάσουμε ξανά, τώρα στέλνουμε τα webhook στον κατάλογο προσθηκών στο https://mysite.com/wp-content/plugins/wp-fusion/api.php?wpf_action=add&contact_id=123

Αυτή η δοκιμή χειρίστηκε 200 webhooks με μέσο χρόνο 212 ms, χωρίς σχεδόν καμία μεταβλητότητα στον χρόνο απόκρισης 🤩
Στη συνέχεια, ο εργάτης παρασκηνίου προχωρά στην εισαγωγή και των 200 χρηστών έναν κάθε φορά, ενώ σέβεται τα όρια πόρων του διακομιστή καθώς και τα όρια API της ActiveCampaign.
Σε αυτήν την περίπτωση, οι 200 χρήστες εισήχθησαν και εγγράφηκαν στα μαθήματά τους μέσα στα επόμενα 6 λεπτά και 12 δευτερόλεπτα.
Έτσι, είναι πολύ εύκολο. Ας δοκιμάσουμε 500 🤔

Ο χρόνος απόκρισης είναι βασικά αμετάβλητος.
Για χάρη του „γιατί όχι“, ας ρίξουμε 1.000 webhook σε αυτό 💁♂️
Χρόνος απόκρισης 239 ms. Βασικά αμετάβλητη και σταθερή απόδοση.
Και να έχετε υπόψη σας αυτό είναι σε ένα πρόγραμμα φιλοξενίας 12 $ / μήναπου εκτελούν τα Elementor, BuddyBoss, LearnDash και WooCommerce, χωρίς προσωρινή αποθήκευση ή άλλες βελτιστοποιήσεις.
Έτσι, νομίζω ότι είναι καιρός να πούμε προσεκτικά ότι λύσαμε το πρόβλημα της απόδοσης του εισερχόμενου webhook στο WP Fusion 😅
Αυτές οι αλλαγές θα είναι διαθέσιμες τη Δευτέρα 27 Δεκεμβρίου στην ενημέρωση v3.38.31 του WP Fusion. Καλές γιορτές σε όλους! 🎁