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

Κυκλοφόρησε το Node.js 21.0, μια πλατφόρμα για την εκτέλεση εφαρμογών δικτύου σε JavaScript. Ο κλάδος Node.js 21.0 θα υποστηρίζεται για 6 μήνες. Τις επόμενες ημέρες θα ολοκληρωθεί η σταθεροποίηση του κλάδου Node.js 20, ο οποίος θα λάβει το καθεστώς LTS και θα υποστηρίζεται μέχρι τον Απρίλιο του 2026. Η συντήρηση του προηγούμενου κλάδου LTS του Node.js 18.0 θα διαρκέσει έως τον Σεπτέμβριο του 2025 και το προηγούμενο έτος LTS κλάδου 16.0 έως τον Απρίλιο του 2024.

Βασικές βελτιώσεις:

  • Το Fetch API έχει δηλωθεί σταθερό, έχει σχεδιαστεί για τη φόρτωση πόρων μέσω του δικτύου και την απλοποίηση της εγγραφής γενικού κώδικα JavaScript κατάλληλου για εργασία στην πλευρά του διακομιστή και του πελάτη. Η υλοποίηση βασίζεται σε κώδικα από τον πελάτη HTTP/1.1 undici και είναι όσο το δυνατόν πιο κοντά στο παρόμοιο API που παρέχεται στα προγράμματα περιήγησης. Το API περιλαμβάνει τη μέθοδο fetch() και αντικείμενα Headers. Αίτημα και απάντηση, που αντιπροσωπεύει τις κεφαλίδες HTTP, αίτημα και απάντηση. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
  • Η υποστήριξη για το WebStreams API, το οποίο παρέχει πρόσβαση σε ροές δεδομένων που λαμβάνονται μέσω του δικτύου, έχει σταθεροποιηθεί. Το API καθιστά δυνατή την προσθήκη των δικών σας χειριστών που λειτουργούν με δεδομένα καθώς οι πληροφορίες φτάνουν μέσω του δικτύου, χωρίς να περιμένετε τη λήψη ολόκληρου του αρχείου. Τα αντικείμενα που είναι διαθέσιμα στο Node.js περιλαμβάνουν ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream και DecompressionStream.
  • Προστέθηκε πειραματική εφαρμογή του προγράμματος-πελάτη WebSocket, συμβατό με προγράμματα περιήγησηςΓια να ενεργοποιήσετε την υποστήριξη WebSocket, χρησιμοποιήστε τη σημαία "--experimental-websocket".
  • Προστέθηκε μια πειραματική λειτουργία για τη χρήση της προεπιλεγμένης υλοποίησης λειτουργικών μονάδων JavaScript ESM (Ενότητες ECMAScript, που χρησιμοποιούνται σε λειτουργικές μονάδες για προγράμματα περιήγησης) αντί για CommonJS (συγκεκριμένα για το Node.js). Η αλλαγή δεν επηρεάζει τις λειτουργικές μονάδες των οποίων η μορφή ορίζεται ρητά μέσω του πεδίου "type" στο package.json, που καθορίζεται μέσω της σημαίας "--input-type" ή είναι προφανής λόγω της επέκτασης αρχείου (.mjs για ESM, .cjs για το CommonJS). Ωστόσο, οι λειτουργικές μονάδες που δεν ορίζονται ρητά ως CommonJS (για παράδειγμα, έχουν επέκταση ".js") θα αντιμετωπίζονται ως λειτουργικές μονάδες ESM όταν ενεργοποιηθεί η νέα λειτουργία. Για την ενεργοποίηση νέων ρυθμίσεων λειτουργικής μονάδας, έχει προταθεί η σημαία "--πειραματικό-προεπιλεγμένο-τύπος".
  • Ο κινητήρας V8 έχει ενημερωθεί στην έκδοση 11.8, που χρησιμοποιείται στο Chromium 118, το οποίο τώρα υποστηρίζει τη μέθοδο ArrayBuffer.prototype.transfer, τη δυνατότητα ομαδοποίησης πινάκων (μέθοδος groupBy) και οδηγίες WebAssembly για την επεξεργασία σταθερών (i32.add, i32.sub, i32.mul, i64 .add, i64.sub και i64.mul).
  • Η υποστήριξη για το πρόγραμμα χειρισμού globalPreload έχει διακοπεί, προς όφελος της καταχώρησης και της προετοιμασίας κλήσεων για τη διαμόρφωση μονάδων.
  • Μια επιλογή "flush" έχει προστεθεί στη συνάρτηση fs.writeFile για να αναγκάσει τα δεδομένα να ξεπλυθούν στη μονάδα δίσκου μετά από κάθε λειτουργία εγγραφής.
  • Βελτιωμένη απόδοση του κώδικα που σχετίζεται με την ανάλυση URL, το API ανάκτησης, τις ροές, το node:fs και το HTTP.
  • Προστέθηκε καθολικό αντικείμενο πλοήγησης. Για παράδειγμα, για να λάβετε δεδομένα σχετικά με τον αριθμό των πυρήνων της CPU, μπορείτε να χρησιμοποιήσετε την ιδιότητα navigator.hardwareConcurrency.
  • Στην παράμετρο "—test", έχει προστεθεί υποστήριξη για μάσκες σφαιρών για την επιλογή δοκιμών προς εκτέλεση (για παράδειγμα, μπορείτε να καθορίσετε "—test **/*.test.js.").
  • Το πακέτο διαχείρισης πακέτων npm 10.2.0 και ο αναλυτής llhttp 9.1.2 έχουν ενημερωθεί.
  • Η υποστήριξη για το Visual Studio 2019 και εκδόσεις macOS παλαιότερες από 11.0 έχει διακοπεί.

Η πλατφόρμα Node.js μπορεί να χρησιμοποιηθεί τόσο για υποστήριξη εφαρμογών ιστού από την πλευρά του διακομιστή όσο και για τη δημιουργία τυπικών προγραμμάτων δικτύου από την πλευρά του πελάτη και του διακομιστή. Για την επέκταση της λειτουργικότητας των εφαρμογών Node.js, έχει προετοιμαστεί μια μεγάλη συλλογή ενοτήτων, συμπεριλαμβανομένων εκείνων που υλοποιούν διακομιστές και clients HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, modules για ενσωμάτωση με διάφορα web frameworks, WebSocket και Ajax handlers, connectors to DBMS (MySQL, PostgreSQL, SQLite, MongoDB), template engines, CSS engines, υλοποιήσεις κρυπτογραφικών αλγορίθμων και συστημάτων εξουσιοδότησης (OAuth), XML parsers.

Για να διασφαλίσει την επεξεργασία μεγάλου αριθμού παράλληλων αιτημάτων, το Node.js χρησιμοποιεί ένα μοντέλο ασύγχρονης εκτέλεσης κώδικα που βασίζεται στον χειρισμό συμβάντων χωρίς αποκλεισμό και στον ορισμό των χειριστών επανάκλησης. Υποστηριζόμενες μέθοδοι για πολυπλεξία συνδέσεων είναι το epoll, το kqueue, το /dev/poll και το select. Για την πολυπλεξία σύνδεσης, χρησιμοποιείται η βιβλιοθήκη libuv, η οποία είναι ένα πρόσθετο για το libev σε συστήματα Unix και το IOCP στα Windows. Η βιβλιοθήκη libeio χρησιμοποιείται για τη δημιουργία μιας ομάδας νημάτων και το c-ares είναι ενσωματωμένο για την εκτέλεση ερωτημάτων DNS σε λειτουργία μη αποκλεισμού. Όλες οι κλήσεις συστήματος που προκαλούν μπλοκάρισμα εκτελούνται μέσα στο νήμα και στη συνέχεια, όπως οι χειριστές σήματος, μεταφέρουν το αποτέλεσμα της εργασίας τους πίσω μέσω ενός ανώνυμου σωλήνα (pipe). Η εκτέλεση του κώδικα JavaScript παρέχεται μέσω της χρήσης της μηχανής V8 που αναπτύχθηκε από την Google (επιπλέον, η Microsoft αναπτύσσει μια έκδοση του Node.js με τη μηχανή Chakra-Core).

Στον πυρήνα του, το Node.js είναι παρόμοιο με τα πλαίσια Perl AnyEvent, Ruby Event Machine, Python Twisted και την υλοποίηση συμβάντων Tcl, αλλά ο βρόχος συμβάντος στο Node.js είναι κρυμμένος από τον προγραμματιστή και μοιάζει με τον χειρισμό συμβάντων σε μια εφαρμογή Ιστού που εκτελείται στο πρόγραμμα περιήγησης. Όταν γράφετε εφαρμογές για το node.js, πρέπει να λάβετε υπόψη τις ιδιαιτερότητες του προγραμματισμού που βασίζεται σε συμβάντα, για παράδειγμα, αντί να κάνετε "var result = db.query("select..");" με την αναμονή για την ολοκλήρωση της εργασίας και την επακόλουθη επεξεργασία των αποτελεσμάτων, το Node.js χρησιμοποιεί την αρχή της ασύγχρονης εκτέλεσης, δηλ. ο κώδικας μετατρέπεται σε "db.query("επιλογή..", συνάρτηση (αποτέλεσμα) {επεξεργασία αποτελεσμάτων});", στην οποία ο έλεγχος θα περάσει αμέσως σε περαιτέρω κώδικα και το αποτέλεσμα του ερωτήματος θα υποβληθεί σε επεξεργασία καθώς φτάνουν τα δεδομένα.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο