Node.js ως Backend: Καλύτερες περιπτώσεις χρήσης, Εργαλεία & Περιορισμοί

Το 2009, μια νέα τεχνολογία έκανε τις ταπεινές αρχές της στον τεράστιο κόσμο της ανάπτυξης backend.

Το Node.js ήταν η πρώτη νόμιμη προσπάθεια να φέρει το JavaScript στην πλευρά του διακομιστή.

Σήμερα, θα ήταν δύσκολο να βρεθεί ένας προγραμματιστής ιστού που δεν έχει ακούσει για τον Κόμβο.

Μετά την έναρξή του, έχει χωρίσει τις κοινότητες, προκάλεσε πολέμους στο φόρουμ, και έφερε πολλούς στην απελπισία.

Σκεφτείτε ότι ακούγεται δραματικά;

Κάντε μια γρήγορη αναζήτηση Google. Θα προσγειωθείτε σε ένα χρυσό ορυχείο διαμάχης. Μερικά επιχειρήματα που θα σκοντάψετε:

"Ό, τι συνέβη με το αξίωμα" Χρησιμοποιήστε το καλύτερο εργαλείο για την εργασία "; Το JavaScript από την πλευρά του διακομιστή ΠΟΤΕ δεν είναι το καλύτερο εργαλείο για την εργασία. "

Μερικοί ακόμη ακούγονται ποιητικοί:

"Η κόλαση επανάκλησης είναι πραγματική
Η σάρωση είναι σκύλα
Δεν έγινε JavaScript για διακομιστές
[...] "

Και μερικά είναι πιο ... απλά:

"Το Node.js είναι μια δυσάρεστη βιβλιοθήκη λογισμικού και δεν θα το χρησιμοποιήσω".

Για αυτήν την ανάρτηση, σκέφτηκα ότι ήρθε η ώρα να θέσω το ρεκόρ κατ 'ευθείαν για το Node.js και το JavaScript ως γλώσσα backend.

Σήμερα θα συζητήσω:

  • Η τρέχουσα κατάσταση του Node.js;
  • Οι καλύτερες περιπτώσεις χρήσης του.
  • Τους περιορισμούς.
  • Τι μπορούμε να περιμένουμε από τον Κόμβο να προχωρήσει.

Η κατάσταση του Node.js ως backend

Πριν να μπει σε αυτό, ας υπενθυμίσουμε μόνο του τι Node.js είναι ακριβώς:

Είναι ένα runtime JavaScript που βασίζεται στον κινητήρα V8 JS του Chrome. Το Node.js χρησιμοποιεί ένα μοντέλο εισόδου / εξόδου μη αποκλεισμού, το οποίο καθιστά ελαφρύ και αποτελεσματικό.

Τώρα ξέρω τον ζωγραφισμένο κόμβο ως έναν εφιάλτη για την ανάπτυξη. Η αλήθεια είναι ότι έχει γίνει ευρέως δημοφιλής. Αλλά μην πάρετε τη δική μου λέξη γι 'αυτό:

Η έρευνα προγραμματιστή Stack Overflow για το 2017 δείχνει ότι αυτή τη στιγμή είναι η πιο χρησιμοποιούμενη τεχνολογία από τους προγραμματιστές.

Είναι επίσης η γλώσσα με την ταχύτερα αυξανόμενη δημοτικότητα τα τελευταία πέντε χρόνια, ενώ γλώσσες όπως το C # και η PHP χάνουν τον ατμό. Η ίδια η JavaScript βρίσκεται επίσης σε εξέλιξη.

Πώς μπορούμε να εξηγήσουμε την ταχεία αλλαγή από την αρχική αντίδραση στην κανονική αποδοχή για το Node.js και τη JavaScript ως γλώσσα backend;

Για να το θέσουμε απλά, ο κόμβος έχει ξεπεράσει την περίοδο "μόλις μανίας" και εισήλθε σε κατάσταση σταθερής ωριμότητας. Έχει οικοδομήσει μια ισχυρή και συνεχώς αυξανόμενη κοινότητα και οικοσύστημα γύρω από τον εαυτό της. Στην πραγματικότητα, ο διαχειριστής πακέτων, npm, είναι πλέον ο μεγαλύτερος κατάλογος λογισμικού στον ιστό.

Το Node.js όχι μόνο οδήγησε σε επανάσταση στην ανάπτυξη ιστότοπου backend, αλλά συνέβαλε επίσης στην απόδοση της απόδοσης στο μετωπικό περιβάλλον, φέρνοντας σοβαρή μηχανική στην πλευρά του πελάτη. Έχει επίσης διαδραματίσει ρόλο στην επέκταση του συνολικού οικοσυστήματος JavaScript και στη βελτίωση των σύγχρονων πλαισίων JS όπως το Angular, React ή Vue.

Με τον καιρό, έχει αποδειχθεί λάθος πολλές από τις προκαταλήψεις που είχαν οι άνθρωποι στις πρώτες μέρες:

Το JavaScript & Node.js είναι δύσκολο να εντοπιστούν.

→ Μπορείτε να αξιοποιήσετε την ίδια εμπειρία εντοπισμού σφαλμάτων που έχετε στο front-end χρησιμοποιώντας το node-inspector που πακετάρει τα native Dev Tools του Chrome.

Οι άνθρωποι στο Joyent γνωρίζουν επίσης ένα πράγμα ή δύο σχετικά με την προχωρημένη αποκατάσταση και δημιουργία προφίλ του κόμβου: ο παγκόσμιος εντοπιστής σφαλμάτων του DTrace κυκλοφόρησε εδώ και πολύ καιρό!

Δεν μπορείτε να το χρησιμοποιήσετε για εφαρμογές διακομιστών σε επίπεδο επιχείρησης.

→ Τέτοιου είδους μηχανική μπορεί να επιτευχθεί με το Node.js: απλά δεν έχει τόσα ενσωματωμένα εργαλεία που παίρνουν από το χέρι. Μεγάλοι παίκτες όπως το Netflix, το PayPal, η Walmart και το Yahoo! όλα τα έχουν χρησιμοποιήσει. Περισσότερα για αυτό αργότερα.

Το JavaScript είναι μια δυναμική γλώσσα, οπότε δεν παίρνετε ένα στατικό πέρασμα από τον μεταγλωττιστή.

→ Αυτό ισχύει. Εντούτοις, εργαλεία όπως το TypeScript και η Flow προέκυψαν για να παρέχουν αυτό το είδος γλωσσικής ασφάλειας. Το Compiler Closure της Google μπορεί επίσης να κάνει το κόλπο εδώ.

Δεν έγινε JavaScript για διακομιστές.

→ Λοιπόν, το JavaScript ήταν ήδη στον διακομιστή την ίδια στιγμή που η Netscape δημιούργησε το JS στον browser τους, το 1995! Πρόκειται για μια μετάδοση τύπου "frontend", διότι, πήρε το ολοκληρωμένο μονοπώλιο γι 'αυτό.

Και ο κατάλογος συνεχίζεται & επάνω.

Επομένως, ας πηδήξουμε μερικές από τις καλύτερες περιπτώσεις χρήσης και τους περιορισμούς, για να έχουμε μια καλύτερη ιδέα για την τοποθέτηση του κόμβου.

JavaScript για backend: Οι περιπτώσεις χρήσης Best Node

Γιατί λοιπόν θα πρέπει να θεωρήσετε το Node.js ως backend στη στοίβα σας;

Γενικά πλεονεκτήματα και χαρακτηριστικά

Επιτρέψτε μου να πυροβολήσω μερικά quickies για σας:

  • Είναι πολύ πιθανό να υποθέσουμε ότι εκτελείτε ήδη το πρόγραμμά σας με το JavaScript. Στην περίπτωση αυτή, η καθολικότητα κωδικών σε όλη τη στοίβα σας είναι ένα μεγάλο πλεονέκτημα που πρέπει να έχετε κατά νου.
  • Τα εργαλεία όπως το webpack βοηθούν στην επαναχρησιμοποίηση κώδικα και στα δύο άκρα και παραμένουν συνεπείς σε όλα τα επίπεδα του συστήματος.
  • Προχωρώντας με μια πλήρη στοίβα JavaScript, μπορείτε να γράψετε μια εφαρμογή ιστού η οποία θα εκτελείται χωρίς προβλήματα τόσο στο πρόγραμμα περιήγησης όσο και στο διακομιστή. Αυτό είναι συναρπαστικό.

Κάποιοι το έχουν δει ως ένα con για το Node.js, υποστηρίζοντας ότι σας αναγκάζει να επιλέξετε JavaScript καθ 'όλη τη διάρκεια. Δεν είναι απολύτως αληθές, καθώς ακόμα μπορείτε να χρησιμοποιήσετε το σωστό εργαλείο για την εργασία, λεπτομερώς.

Ας πούμε ότι πρέπει να κάνετε κωδικοποίηση βίντεο, δεν θα πάτε να ψάχνετε για μια εσωτερική βιβλιοθήκη Node.js: απλά θα καλέσετε δοκιμασμένα εργαλεία στη γραμμή εντολών από τον Κόμβο. Ή αν υπάρχει ήδη μια βιβλιοθήκη Python που μπορεί να κάνει τον πολύπλοκο υπολογισμό που χρειάζεστε, μπορείτε να δημιουργήσετε μια μικρο-υπηρεσία και να καλέσετε αυτές τις λειτουργίες μέσω ενός API REST.

  • Το χαρακτηριστικό async / await άλλαξε εντελώς τον τρόπο με τον οποίο γράφουμε ασύγχρονο κώδικα, πράγμα που το κάνει να φαίνεται και να συμπεριφέρεται λίγο περισσότερο σαν σύγχρονος κώδικας. Υποστηριζόμενη από το Node.js από το v7.6, αυτό το χαρακτηριστικό γνώρισμα ήρθε ως μέρος της λύσης στην περίφημη κόλαση Callback.

Όλα τα παραπάνω κάνουν το Node.js μεγάλο για τις ακόλουθες περιπτώσεις χρήσης.

Χρήση της περίπτωσης 1: Εφαρμογές σε πραγματικό χρόνο

Οι συνεργαζόμενες εφαρμογές (Trello, Έγγραφα Google), η ζωντανή συνομιλία, τα στιγμιαία μηνύματα και τα τυχερά παιχνίδια στο διαδίκτυο είναι όλα παραδείγματα RTA που επωφελούνται από μια αρχιτεκτονική Node.js.

Αυτές οι εφαρμογές λειτουργούν μέσα σε ένα χρονικό πλαίσιο που οι χρήστες αισθάνονται ως άμεσες και τρέχουσες. Οι προδιαγραφές Node.js είναι η λύση για τη χαμηλή λανθάνουσα κατάσταση που απαιτείται για αυτά τα προγράμματα να λειτουργούν αποτελεσματικά.

Διευκολύνει το χειρισμό πολλαπλών αιτημάτων πελάτη, επιτρέπει την επαναχρησιμοποίηση πακέτων κώδικα βιβλιοθήκης και ο συγχρονισμός δεδομένων μεταξύ του πελάτη και του διακομιστή συμβαίνει πολύ γρήγορα.

Χρήση της περίπτωσης 2: Εφαρμογές μιας σελίδας

Τα SPA είναι εφαρμογές ιστού που φορτώνουν μια μόνο σελίδα HTML και ενημερώνουν δυναμικά τη συγκεκριμένη σελίδα, καθώς ο χρήστης αλληλεπιδρά με την εφαρμογή. Ένα μεγάλο μέρος της εργασίας συμβαίνει στην πλευρά του πελάτη, στο JavaScript.

Ακόμα κι αν πρόκειται για μια τρομερή εξέλιξη στην ανάπτυξη ιστοσελίδων, έρχονται με κάποια προβλήματα όταν πρόκειται για απόδοση. Αυτό μπορεί να επηρεάσει αρνητικά την απόδοση SEO σας για παράδειγμα. Η απόδοση σε διακομιστή σε περιβάλλον Node.js είναι μια δημοφιλής επιλογή για την επίλυση αυτού του ζητήματος.

Χρήση της περίπτωσης 3: δυνατότητα κλιμάκωσης

Node.js δεν θα πάρει ποτέ μεγαλύτερη από ό, τι χρειάζεστε για να είναι. Η ομορφιά της είναι ότι είναι αρκετά μινιμαλιστική ώστε να προσαρμόζεται ανάλογα με τη χρήση. Απόδοσης-σοφός, αυτό είναι το κλειδί.

Ακόμα και το όνομά του τονίζει ότι είναι κατασκευασμένο για να συγκεντρώνει πολλαπλούς μικρούς κατανεμημένους κόμβους που επικοινωνούν μεταξύ τους.

Το modularity του κόμβου σας επιτρέπει να δημιουργείτε μικρές εφαρμογές χωρίς να χρειάζεται να αντιμετωπίσετε ένα φουσκωμένο, υπερβολικό οικοσύστημα. Επιλέγετε τα εργαλεία που χρειάζεστε για τη δουλειά και στη συνέχεια κλιμακώνετε όπως απαιτείται.

Αυτή η κλιμάκωση δεν είναι απαλλαγμένη από επιπλοκές, αν και δεν είστε προσεκτικοί, το Node.js μπορεί να γίνει ... επικίνδυνο.

Περιορισμοί backend Node.js

Βάλτε αμβλύ, Node.js σας επιτρέπει να πυροβολείτε εύκολα στο πόδι. Η διαμόρφωση και προσαρμογή έρχονται σε μια τιμή, και εάν είστε άπειροι ή απείθαρχοι, ίσως χάνετε τον εαυτό σας - ή τον πελάτη σας.

Σε αντίθεση με μια πιο συμβατική προσέγγιση, μπορείτε να δημιουργήσετε τη δομή που υποστηρίζει το backend σας. Αυτό συνεπάγεται πολλή λήψη αποφάσεων, που σημαίνει ότι πρέπει να ξέρετε τι κάνετε και πού πηγαίνετε εάν το σχέδιό σας ζυγίζει.

Με άλλες γλώσσες όπως το Ruby και το γνωστό του πλαίσιο Ruby on Rails, για παράδειγμα, ήμασταν συνηθισμένοι στο πρότυπο "σύμβαση πάνω από τη διαμόρφωση". Αυτά τα παραδοσιακά πλαίσια πήραν τους προγραμματιστές από το χέρι και απολάμβαναν κάποιο φως στο ασφαλές μονοπάτι.

Με το Node.js αυτό πηγαίνει το κεφάλι πάνω από τα τακούνια. Περισσότερη ελευθερία δίνεται στους προγραμματιστές, αλλά ο δρόμος μπορεί να πάρει σκοτεινό και τρομακτικό εάν κάνετε εσφαλμένες αποφάσεις.

Και τότε θα διαπιστώσετε ότι η "κόλαση επανάκλησης" είναι πράγματι πραγματική.

Αυτό δεν σημαίνει ότι δεν μπορείτε να δημιουργήσετε μεγαλύτερες εφαρμογές διακομιστή με αυτό, αλλά θα πρέπει πάντα να έχετε υπόψη αυτούς τους παράγοντες.

Ακόμη και ο δημιουργός του Node.js, Ryan Dahl, τελικά συνειδητοποίησε τους περιορισμούς του συστήματος πριν φύγει για να εργαστεί σε άλλα έργα. Ήταν πολύ διαφανής γι 'αυτό:

"[...] Νομίζω ότι ο κόμβος δεν είναι το καλύτερο σύστημα για την κατασκευή ενός τεράστιου web server. Θα χρησιμοποιήσω το Go για αυτό. Και ειλικρινά, αυτός είναι ο λόγος για τον οποίο έφυγα από τον κόμβο. Ήταν η συνειδητοποίηση ότι: OH, στην πραγματικότητα, αυτό δεν είναι το καλύτερο σύστημα από την πλευρά του διακομιστή ποτέ. "

Οι προκαταλήψεις που αναφέρθηκαν προηγουμένως ήταν όλες αληθινές σε ένα σημείο της μικρής διάρκειας ζωής του Node.js και εξακολουθούν να είναι σε κάποιο βαθμό. Έχει ωριμάσει και έχει μεγαλώσει αρκετά ώστε να μπορείτε να τα περιπλανήσετε αν αφιερώσετε χρόνο. Τα εργαλεία που μπορεί να προσφέρει η κοινότητα σας επιτρέπουν να κάνετε οτιδήποτε.

Δημοφιλή εργαλεία backend JavaScript

Όχι πολύ καιρό πριν, αν σκεφτήκατε να δημιουργήσετε μια πλήρη στοίβα JS, το πρώτο πράγμα που ήρθε στο μυαλό ήταν η στοίβα MEAN (MongoDB, Express, γωνιακή & κόμβος).

Είναι ακόμα μια σχετική ομάδα εργαλείων σήμερα, αλλά το οικοσύστημα JavaScript έχει τώρα πολλά περισσότερα να προσφέρει, τόσο στο front όσο και στο backend, ότι δεν μπορείτε να περιορίσετε τον εαυτό σας σε αυτό.

Ακολουθούν μερικά από τα πιο δημοφιλή πλαίσια υποστήριξης JavaScript το 2017:

  • Το Express.js εξακολουθεί να είναι το πιο δημοφιλές πλαίσιο Node.js εκεί έξω. Είναι ένα γρήγορο, απρογραμμάτιστο & μινιμαλιστικό πλαίσιο ιστού. Εξελίχθηκε γρήγορα επειδή είναι απλό και απλό. Είναι ίσως το πιο κοντά στις βασικές ιδέες του Node.js για ένα ελαφρύ σύστημα με προσέγγιση modularity.
  • Meteor, από την άλλη πλευρά, χρησιμοποιεί καθαρή JavaScript και Node.js μέσα σε μια πολύ μεγαλύτερη αρχιτεκτονική. Ο Meteor είναι ένα οικοσύστημα το οποίο μπορεί να είναι καλό για την κατασκευή πιο σύνθετων εφαρμογών διακομιστή. Ωστόσο, η χρήση του μπορεί να γίνει πιο δύσκολη εάν θέλετε να κάνετε κάτι που δεν είναι ενσωματωμένο.
  • Το Sails.js είναι ένα πλαίσιο MVC σε πραγματικό χρόνο. Σχεδιάστηκε για να μιμηθεί το πρότυπο MVC του Ruby on Rails, αλλά με την υποστήριξη των σύγχρονων εφαρμογών. Αυτό επιτυγχάνεται μέσω API που βασίζονται σε δεδομένα με μια κλιμακούμενη αρχιτεκτονική προσανατολισμένη στις υπηρεσίες.
  • Το Koa.js δημιουργήθηκε από την ομάδα πίσω από την Express. Διατίθεται στο εμπόριο ως το "πλαίσιο επόμενης γενιάς web για το Node.js", είναι ένα μικρότερο, πιο εκφραστικό και πιο ισχυρό θεμέλιο για εφαρμογές ιστού και API.

Υπάρχουν πολλά περισσότερα για να εξερευνήσετε, γι 'αυτό θα ρίξω λίγα πραγματικά γρήγορα: Nest.js, Hapi.js, Socket.io, Mean.js, Total.js, Derby.js & Keystone.js.

Προχωρώντας μπροστά

Το σημείο αυτού του άρθρου δεν ήταν να καταλήξουμε σε ένα τελικό συμπέρασμα σχετικά με το αν το Node.js προσφέρει το καλύτερο περιβάλλον backend. Ούτε ήταν να σας πω ότι πρέπει να το χρησιμοποιήσετε.

Και σίγουρα δεν θα βγούμε έξω και θα πω ότι είναι κάτι καλύτερο από άλλες δημοφιλείς γλώσσες όπως Java, C #, C ++, PHP, Python, Go ή Ruby.

Υποθέτω ότι ο στόχος εδώ είναι να ζωγραφίσει μια γκρίζα περιοχή μεταξύ των ασπρόμαυρων απόψεων που διαβάζω σε Node.js και JavaScript ως γλώσσα backend.

Είτε σας αρέσει είτε όχι, το Node.js είναι εμφανώς εδώ για να μείνει. ·)

Το ενδιαφέρον Node.js με την πάροδο του χρόνου

Δεν πρέπει ποτέ να σκεφτείτε κανένα πλαίσιο ως ασημένια σφαίρα που θα επιλύσει μαγικά όλα τα προβλήματά σας. Το Node.js είναι απλά ένα άλλο εργαλείο στο απέραντο σύμπαν ανάπτυξης ιστού. Θα κάνει τη δουλειά εξαιρετικά καλά σε ορισμένες περιπτώσεις, αλλά θα είναι πόνου σε άλλους.

Μετά από αυτό, είναι κάθε δουλειά του προγραμματιστή να σκεφτεί προσεκτικά την σωστή στοίβα για κάθε νέο έργο. Είναι σημαντικό να γνωρίζετε όλες τις επιλογές σας και να μην διαγράφετε καμία εναλλακτική λύση από το get-go.

Το Snipcart, για παράδειγμα, τρέχει σε μια αρχιτεκτονική .NET, η οποία επίσης έχει το δίκαιο μερίδιο της naysayers. Γιατί το επιλέξαμε;

Ήταν το σωστό εργαλείο για τη δουλειά, αυτή τη στιγμή.

Εδώ είναι η ελπίδα ότι αυτή η επισκόπηση σας βοηθά να αποφασίσετε για τον Κόμβο!

Ποιες είναι οι σκέψεις σας για το Node.js; Και η JavaScript ως γλώσσα υποστήριξης; Οι εμπειρίες που θέλετε να μοιραστείτε; Είμαι σίγουρος ότι πολλοί από εσάς έχουν κάτι να πουν γι 'αυτό, γι' αυτό μη διστάσετε να ξεκινήσετε / να συμμετάσχετε στη συζήτηση στα σχόλια! Εάν έχετε απολαύσει αυτή τη θέση, παρακαλώ πάρτε ένα δευτερόλεπτο για να το μοιραστείτε στο Twitter.

Αυτή η ανάρτηση δημοσιεύθηκε αρχικά στο blog και ενημερωτικό δελτίο Snipcart.