Τι είναι το Node.js;

Το Node.js είναι ένα περιβάλλον εκτέλεσης JavaScript. Ακούγεται υπέροχο, αλλά τι σημαίνει αυτό; Πώς λειτουργεί;

Το περιβάλλον εκτέλεσης Node.js περιλαμβάνει όλα όσα χρειάζεστε για να εκτελέσετε ένα πρόγραμμα γραμμένο σε JavaScript.

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

Τώρα μπορείτε να κάνετε πολύ περισσότερα με το JavaScript παρά απλώς να κάνετε διαδραστικούς ιστότοπους

Το JavaScript έχει πλέον τη δυνατότητα να κάνει πράγματα που μπορούν να κάνουν άλλες γλώσσες σεναρίου όπως η Python.

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

Γιατί το Node.js;

Ακολουθεί ένας επίσημος ορισμός όπως αναφέρεται στον επίσημο ιστότοπο του Node.js:

Το Node.js® είναι χρόνος εκτέλεσης JavaScript που βασίζεται στη μηχανή V8 JavaScript του Chrome.

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

Το οικοσύστημα πακέτων του Node.js, npm, είναι το μεγαλύτερο οικοσύστημα βιβλιοθηκών ανοιχτού κώδικα στον κόσμο.

Έχουμε ήδη συζητήσει την πρώτη γραμμή αυτού του ορισμού: "Το Node.js® είναι ένας χρόνος εκτέλεσης JavaScript που βασίζεται στη μηχανή V8 JavaScript του Chrome." Τώρα ας καταλάβουμε τις άλλες δύο γραμμές για να μάθουμε γιατί το Node.js είναι τόσο δημοφιλές.

I / O αναφέρεται στην είσοδο / έξοδο. Μπορεί να είναι οτιδήποτε κυμαίνεται από την ανάγνωση / εγγραφή τοπικών αρχείων έως την υποβολή αιτήματος HTTP έως ένα API.

Το I / O παίρνει χρόνο και επομένως αποκλείει άλλες λειτουργίες.

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

Αποκλεισμός εισόδου / εξόδου

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

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

Εκεί μπαίνει το μέρος που δεν μπλοκάρει.

Μη αποκλεισμός I / O

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

Αυτό το I / O χωρίς αποκλεισμό εξαλείφει την ανάγκη πολλαπλών σπειρωμάτων, καθώς ο διακομιστής μπορεί να χειριστεί ταυτόχρονα πολλαπλά αιτήματα.

Ο βρόχος συμβάντος JavaScript

Εάν έχετε 26 λεπτά, παρακολουθήστε αυτήν την εξαιρετική εξήγηση βίντεο του Node Event Loop:

Διαφορετικά, ακολουθεί μια γρήγορη αναλυτική εξήγηση για το πώς λειτουργεί το JavaScript Event Loop.

  1. Πιέστε main()στη στοίβα κλήσεων.
  2. Πιέστε console.log()στη στοίβα κλήσεων. Στη συνέχεια, τρέχει αμέσως και αναδύεται.
  3. Σπρώξτε setTimeout(2000)στη στοίβα. setTimeout(2000)είναι ένα Node API. Όταν το ονομάζουμε, καταχωρούμε το ζεύγος επανάκλησης συμβάντων. Το συμβάν θα περιμένει 2000 χιλιοστά του δευτερολέπτου, τότε η συνάρτηση επανάκλησης είναι η συνάρτηση.
  4. Αφού το καταχωρίσετε στα API, εμφανίζεται setTimeout(2000)από τη στοίβα κλήσεων.
  5. Τώρα το δεύτερο setTimeout(0)εγγράφεται με τον ίδιο τρόπο. Τώρα έχουμε δύο API κόμβου σε αναμονή για εκτέλεση.
  6. Αφού περιμένει 0 δευτερόλεπτα, setTimeout(0)μετακινείται στην ουρά επανάκλησης και το ίδιο συμβαίνει με setTimeout(2000).
  7. Στην ουρά επανάκλησης, οι συναρτήσεις περιμένουν να είναι κενή η στοίβα κλήσεων, επειδή μόνο μία δήλωση μπορεί να εκτελέσει μια φορά. Αυτό φροντίζεται από το βρόχο συμβάντων.
  8. Το τελευταίο console.log()τρέχει, και οι main()λήψεις εμφανίζονται από τη στοίβα κλήσεων.
  9. Ο βρόχος συμβάντων βλέπει ότι η στοίβα κλήσεων είναι κενή και η ουρά επανάκλησης δεν είναι κενή. Έτσι μετακινεί τις επιστροφές κλήσεων (σε σειρά από την πρώτη προς την πρώτη) στη στοίβα κλήσεων για εκτέλεση.

npm

Αυτές είναι βιβλιοθήκες που δημιουργήθηκαν από την καταπληκτική κοινότητα που θα λύσουν τα περισσότερα από τα γενικά σας προβλήματα. Το npm (Διαχειριστής πακέτων κόμβων) διαθέτει πακέτα που μπορείτε να χρησιμοποιήσετε στις εφαρμογές σας για να κάνετε την ανάπτυξή σας πιο γρήγορη και αποτελεσματική.

Απαιτώ

Το Require κάνει τρία πράγματα:

  • Φορτώνει μονάδες που συνοδεύονται από Node.js όπως το σύστημα αρχείων και HTTP από το Node.js API.
  • Φορτώνει βιβλιοθήκες τρίτων όπως το Express και το Mongoose που εγκαθιστάτε από το npm.
  • Σας επιτρέπει να απαιτήσετε τα δικά σας αρχεία και να διαμορφώσετε το έργο.

Το Require είναι μια συνάρτηση, και δέχεται μια παράμετρο "path" και επιστρέφει module.exports.

Ενότητες κόμβων

Η μονάδα Node είναι ένα επαναχρησιμοποιήσιμο τμήμα κώδικα του οποίου η ύπαρξη δεν επηρεάζει κατά λάθος άλλο κώδικα.

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

V8 turbo-charge JavaScript αξιοποιώντας το C ++

Το V8 είναι ένας κινητήρας ανοιχτού κώδικα, γραμμένος σε C ++.

JavaScript -> V8 (C ++) -> Κωδικός μηχανήματος

Το V8 εφαρμόζει ένα σενάριο που ονομάζεται ECMAScript όπως καθορίζεται στο ECMA-262. Το ECMAScript δημιουργήθηκε από την Ecma International για την τυποποίηση της JavaScript.

Το V8 μπορεί να εκτελεστεί αυτόνομο ή να ενσωματωθεί σε οποιαδήποτε εφαρμογή C ++. Διαθέτει αγκίστρια που σας επιτρέπουν να γράψετε τον δικό σας κωδικό C ++ που μπορείτε να διαθέσετε στη JavaScript.

Αυτό ουσιαστικά σας επιτρέπει να προσθέσετε λειτουργίες στο JavaScript ενσωματώνοντας το V8 στον κώδικα C ++, έτσι ώστε ο κώδικας C ++ να κατανοεί περισσότερα από αυτά που ορίζει το πρότυπο ECMAScript.

Επεξεργασία: Όπως γνωστοποιήθηκε από τον Greg Bulmash, υπάρχουν πολλοί διαφορετικοί μηχανισμοί χρόνου εκτέλεσης JavaScript εκτός από το V8 από το Chrome όπως το SpiderMonkey από το Mozilla, το Chakra από τη Microsoft κ.λπ. Λεπτομέρειες για το ίδιο μπορούν να βρεθούν σε αυτή τη σελίδα.

Εκδηλώσεις

Κάτι που συνέβη στην εφαρμογή μας στο οποίο μπορούμε να ανταποκριθούμε. Υπάρχουν δύο τύποι συμβάντων στον κόμβο.

  • Συμβάντα συστήματος: C ++ core από μια βιβλιοθήκη που ονομάζεται libuv. (Για παράδειγμα, ολοκληρώθηκε η ανάγνωση ενός αρχείου).
  • Προσαρμοσμένα συμβάντα: Πυρήνας JavaScript.

Γράφοντας το Hello World στο Node.js

Πρέπει να το κάνουμε αυτό, έτσι δεν είναι;

Δημιουργήστε ένα αρχείο app.js και προσθέστε τα ακόλουθα σε αυτό.

console.log("Hello World!");

Ανοίξτε το τερματικό κόμβου, αλλάξτε τον κατάλογο στο φάκελο όπου αποθηκεύεται και εκτελείται το αρχείο node app.js.

Μπαμ - μόλις γράψατε το Hello World στο Node.js.

Ακολουθήστε @ Priyesh_p18

Υπάρχουν πολλοί πόροι που μπορείτε να χρησιμοποιήσετε μάθετε περισσότερα για το Node.js, συμπεριλαμβανομένου του freeCodeCamp.org.