Η ισχυρή αρχιτεκτονική του Node που βασίζεται σε συμβάντα είναι ένα από τα ισχυρότερα πλεονεκτήματά του.
Βασικά Takeaways
- Ο προγραμματισμός που βασίζεται σε συμβάντα είναι μια καλή επιλογή για διαδραστικές εφαρμογές, ειδικά για εφαρμογές GUI, καθώς επιτρέπει στον κώδικα να ανταποκρίνεται στις ενέργειες του χρήστη με οποιαδήποτε σειρά.
- Ο προγραμματισμός που βασίζεται σε συμβάντα χρησιμοποιείται συνήθως σε εφαρμογές ιστού, όπου οι ακροατές συμβάντων ενεργοποιούνται όταν οι χρήστες αλληλεπιδρούν με το DOM.
- Η εφαρμογή προγραμματισμού βάσει συμβάντων στο Node.js είναι εύκολη με την κλάση EventEmitter, η οποία σας επιτρέπει να δημιουργείτε προσαρμοσμένα συμβάντα και να επισυνάπτετε προγράμματα ακρόασης συμβάντων για να τα χειρίζεστε.
Κατά την κατασκευή οποιασδήποτε εφαρμογής λογισμικού, μια κρίσιμη απόφαση περιλαμβάνει την επιλογή του κατάλληλου παραδείγματος για τον κώδικά σας.
Ο προγραμματισμός βάσει συμβάντων είναι μια καλή επιλογή για διαδραστικές εφαρμογές που ανταποκρίνονται σε ενέργειες του χρήστη που μπορεί να συμβούν με οποιαδήποτε σειρά. Είναι ένα πιο δημοφιλές παράδειγμα με εφαρμογές GUI παρά με προγράμματα γραμμής εντολών ή ενσωματωμένο κώδικα συστημάτων.
Τι είναι οι εκδηλώσεις;
Μπορείτε να σκεφτείτε ένα συμβάν ως μια ενέργεια ή ένα συμβάν που ο κώδικάς σας μπορεί να αναγνωρίσει και να ανταποκριθεί. Το σύστημα ή ένας χρήστης μπορεί να ενεργοποιήσει ένα συμβάν και ο κωδικός σας θα καταχωρεί συνήθως μια συνάρτηση για να το χειριστεί.
Ένα παράδειγμα βασικού συμβάντος είναι να κάνετε κλικ σε ένα κουμπί για να εκτελέσετε μια συγκεκριμένη ενέργεια. Η πράξη του κλικ στο κουμπί ενεργοποιεί ένα συμβάν και η συνάρτηση που εκτελείται όταν γίνει το κλικ ονομάζεται ακροατής εκδήλωσης (ή χειριστή).
Τι είναι ο προγραμματισμός βάσει συμβάντων;
Ο προγραμματισμός με γνώμονα τα συμβάντα είναι α πρότυπο προγραμματισμού στην οποία η ροή εκτέλεσης μιας εφαρμογής εξαρτάται από συμβάντα που συμβαίνουν αντί να είναι αυστηρά διαδοχική.
Αυτό το παράδειγμα χρησιμοποιείται κυρίως κατά τη δημιουργία διεπαφών χρήστη και εφαρμογών σε πραγματικό χρόνο, όπου ένα γεγονός όπως η ενέργεια ενός χρήστη θα πρέπει να ενεργοποιήσει μια ενέργεια στο σύστημα.
Το παράδειγμα είναι πολύ δημοφιλές κατά τη δημιουργία εφαρμογών ιστού, όπου οι ακροατές συμβάντων ενεργοποιούνται όταν αλληλεπιδρούν οι χρήστες το μοντέλο αντικειμένου εγγράφου (DOM).
Η ακόλουθη εικόνα απεικονίζει πώς λειτουργεί η ροή στον προγραμματισμό που βασίζεται σε συμβάντα. Όταν συμβαίνει ένα συμβάν, το κανάλι συμβάντος το λαμβάνει και το διαβιβάζει στον κατάλληλο ακροατή για χειρισμό:
Προγραμματισμός βάσει συμβάντων στο Node.js
ο Βρόχος συμβάντος JavaScript είναι μια από τις θεμελιώδεις έννοιες πίσω από την ασύγχρονη φύση του χρόνου εκτέλεσης Node.js. Μια αρχιτεκτονική που βασίζεται σε γεγονότα χρησιμοποιεί το ενσωματωμένο της EventEmitter μονάδα για τη διευκόλυνση της απρόσκοπτης ροής εκτέλεσης.
Με προγραμματισμό που βασίζεται σε συμβάντα, το Node.js σάς επιτρέπει να δημιουργείτε εφαρμογές από την πλευρά του διακομιστή που μπορούν να χειριστούν την αλληλεπίδραση με τον χρήστη, τις λειτουργίες I/O και την επεξεργασία δεδομένων σε πραγματικό χρόνο. Αυτό συμβαίνει με τρόπο μη αποκλεισμό, με αποτέλεσμα βελτιωμένη απόδοση και πιο ομαλή εμπειρία για τον χρήστη.
Η εφαρμογή προγραμματισμού βάσει συμβάντων στο Node.js είναι εύκολη όταν κατανοείτε τα βασικά στοιχεία του καθορισμού, της ενεργοποίησης και του χειρισμού συμβάντων.
Η κλάση EventEmitter
Με την EventEmitter class στο Node.js, μπορείτε να δημιουργήσετε προσαρμοσμένα συμβάντα και να επισυνάψετε προγράμματα ακρόασης συμβάντων για να τα χειριστείτε. Για να χρησιμοποιήσετε την κλάση στον κώδικά σας, εισαγάγετε την από το εκδηλώσεις ενότητα όπως αυτή:
// CommonJS
const { EventEmitter } = require("events")
// ES6
import { EventEmitter } from"events"
Η κλάση και οι συναρτήσεις μέλους της είναι στη συνέχεια διαθέσιμες για χρήση στην εφαρμογή σας. Για να ξεκινήσετε την εκπομπή και το χειρισμό συμβάντων, αρχικοποιήστε μια νέα παρουσία του EventEmitter τάξη.
Για παράδειγμα:
const FoodEvents = new EventEmitter()
Αυτό δημιουργεί ένα νέο αντικείμενο πομπού που ονομάζεται FoodEvents που μπορεί να εκπέμπει συμβάντα και να καταχωρεί ακροατές. Η κλάση EventEmmitter παρέχει τρεις μεθόδους για την ακρόαση ενός συμβάντος: επί, addListener, και μια φορά.
ο επί μέθοδος είναι η πιο βασική λειτουργία για την προσθήκη ακρόασης συμβάντων και addListener λειτουργεί με τον ίδιο ακριβώς τρόπο. Και οι δύο δέχονται το όνομα συμβάντος και μια συνάρτηση επανάκλησης ως ορίσματα. Η επανάκληση είναι η πραγματική λειτουργία χειριστή. Μπορείς να χρησιμοποιήσεις επί και addListener εναλλακτικά.
Δείτε πώς χειρίζεστε ένα συμβάν χρησιμοποιώντας το επί μέθοδος:
FoodEvents.on("cookie_ready", (data) => {
console.log("Cookie ready for packaging, data received: ", data);
})
Χρησιμοποιώντας addListener ως άμεση εναλλακτική για επί:
FoodEvents.addListener("cookie_ready", (data) => {
console.log(
"Cookie will now be packaged and sent out, data received: ",
data
);
})
Και τα δύο αυτά παραδείγματα θα προσθέσουν την επιστροφή κλήσης στη σειρά των προγραμμάτων ακρόασης συμβάντων για το cookie_ready Εκδήλωση. Εάν χρησιμοποιήσετε και τα δύο, οι επανακλήσεις τους θα ενεργοποιηθούν με τη σειρά.
ο μια φορά Η μέθοδος καταγράφει ένα πρόγραμμα ακρόασης συμβάντος μίας χρήσης, το οποίο εκτελείται την επόμενη φορά που ενεργοποιείται το συμβάν. Μετά από αυτό, το σύστημα θα το αφαιρέσει από τη σειρά των ακροατών.
Δείτε πώς να χρησιμοποιήσετε μια φορά για να χειριστείτε ένα γεγονός μίας χρήσης:
FoodEvents.once("cookie_sent", (data) => {
console.log("Cookie is sent out, data received: ", data);
})
Σε αυτήν την περίπτωση, ο πομπός θα ακούει μόνο για το cookie_sent εκδήλωση μία φορά και αφαιρέστε το πρόγραμμα χειρισμού μετά την εκτέλεσή του.
Και οι τρεις μέθοδοι επιστρέφουν τον πομπό, ώστε να μπορείτε να αλυσιδώσετε τις κλήσεις σε οποιαδήποτε από αυτές.
Μην ξεχνάτε ότι, για να χειριστεί ένας ακροατής ένα συμβάν, η εφαρμογή πρέπει να εκπέμπει αυτό το συμβάν κάποια στιγμή. Ακολουθεί κάποιο δείγμα κώδικα για την εκπομπή cookie_ready εκδήλωση χρησιμοποιώντας το εκπέμπουν μέθοδος:
functionbakeCookie() {
console.log("Cookie is baking, almost ready...")setTimeout(() => {
FoodEvents.emit("cookie_ready", { flavor: "vanilla cookie" })
}, 3000)
}
bakeCookie()
Όταν εκτελείτε αυτόν τον κωδικό, ο οποίος εκτυπώνει μια ειδοποίηση στην κονσόλα ότι το cookie ψήνεται, περιμένει για 3 δευτερόλεπτα και εκπέμπει cookie_ready εκδήλωση, θα λάβετε μια έξοδο όπως η παρακάτω εικόνα:
Αυτό δείχνει πώς εκτελούνται οι ακροατές συμβάντων με τη σειρά που τους καταχωρείτε.
ο EventEmitter Η τάξη παρέχει περισσότερες μεθόδους, όπως:
- removeListener: Αφαιρεί μια παρουσία ενός ακροατή από τη σειρά των ακροατών συμβάντων. ο μακριά από μέθοδος είναι επίσης διαθέσιμη για το σκοπό αυτό.
- prependListener: Αυτή η μέθοδος καταχωρεί επίσης έναν ακροατή, αλλά αντί να τον προσθέσει στο τέλος του πίνακα ακροατών, τον προσθέτει στην αρχή. Στη συνέχεια θα εκτελεστεί πριν από οποιουσδήποτε άλλους ακροατές που μπορεί να έχετε ήδη εγγραφεί.
- prependOnceListener: Αυτό λειτουργεί ακριβώς όπως το prependListener, αλλά ο ακροατής εκτελείται μόνο μία φορά, όπως στην περίπτωση του μια φορά.
- αφαιρέστε όλους τους ακροατές: Αυτή η συνάρτηση καταργεί όλους τους εγγεγραμμένους ακροατές για ένα συγκεκριμένο συμβάν με όνομα ή όλους τους ακροατές εάν δεν του μεταβιβάσετε κανένα όρισμα.
- ακροατές: Επιστρέφει έναν πίνακα ακροατών του ονόματος συμβάντος που του μεταβιβάζετε ως όρισμα.
- Ονόματα συμβάντων: Μπορείτε να χρησιμοποιήσετε αυτήν τη συνάρτηση για να λάβετε όλα τα ονόματα συμβάντων για τα οποία έχετε ήδη καταχωρίσει έναν ακροατή.
- setMaxListeners: Το Node.js εκπέμπει μια προειδοποίηση από προεπιλογή όταν εγγράφετε περισσότερους από 10 ακροατές για ένα συμβάν, για την αποφυγή διαρροών μνήμης. Μπορείτε να προσαρμόσετε αυτήν την προεπιλεγμένη τιμή χρησιμοποιώντας το setMaxListeners. Μπορείτε επίσης να ελέγξετε αυτήν την τιμή χρησιμοποιώντας getMaxListeners.
ο εκδηλώσεις Το πακέτο παρέχει ολοκληρωμένη λειτουργικότητα για προγραμματισμό που βασίζεται σε συμβάντα στο Node.js.
Ποιες είναι μερικές βέλτιστες πρακτικές προγραμματισμού βάσει συμβάντων;
Κάθε προσέγγιση προγραμματισμού έχει τα δικά της ανταλλάγματα και η παράβλεψη των βέλτιστων πρακτικών μπορεί να έχει αρνητικές επιπτώσεις στην εφαρμογή σας. Ακολουθούν ορισμένες βέλτιστες πρακτικές που πρέπει να λαμβάνονται υπόψη κατά τη δημιουργία εφαρμογών που βασίζονται σε εκδηλώσεις:
- Χρησιμοποιήστε συνοπτικά και περιγραφικά ονόματα για συμβάντα για να ενεργοποιήσετε μια καθαρή και διατηρήσιμη βάση κώδικα.
- Υιοθετήστε καλές πρακτικές χειρισμού σφαλμάτων και καταγραφής, για να επιτρέψετε τον εύκολο εντοπισμό σφαλμάτων.
- Αποφύγετε την κόλαση της επανάκλησης (ενσωμάτωση πολλαπλών ανακλήσεων) όταν γράφετε ακροατές συμβάντων. Αντ' αυτού χρησιμοποιήστε υποσχέσεις JavaScript.
- Μην δημιουργείτε πάρα πολλούς ακροατές για ένα συμβάν. Σκεφτείτε να χωρίσετε τα γεγονότα και να τα αλυσοδέσετε.
Δημιουργήστε εφαρμογές με τη σωστή αρχιτεκτονική
Ένας γενικός κανόνας που ισχύει για την κατασκευή λογισμικού είναι η λήψη κατάλληλων αποφάσεων αρχιτεκτονικής και σχεδιασμού. Όταν ακολουθείτε τη λάθος προσέγγιση για τη δημιουργία μιας εφαρμογής, θα αντιμετωπίσετε τις συνέπειες τελικά.
Ο προγραμματισμός βάσει συμβάντων είναι ένα παράδειγμα που μπορεί να έχει σημαντικό αντίκτυπο στην αρχιτεκτονική και την απόδοση μιας εφαρμογής. Κάθε φορά που η εφαρμογή σας, ή ένα μέρος της, εξαρτάται από συμβάντα για να λειτουργήσει, θα πρέπει να εξετάζετε τον προγραμματισμό που βασίζεται σε συμβάντα.