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

Πραγματοποιήθηκε η κυκλοφορία του Node.js 20.0, μιας πλατφόρμας για την εκτέλεση εφαρμογών δικτύου σε JavaScript. Το Node.js 20.0 έχει εκχωρηθεί στον κλάδο υποστήριξης μεγάλης διάρκειας, αλλά αυτή η κατάσταση δεν θα εκχωρηθεί μέχρι τον Οκτώβριο, μετά τη σταθεροποίηση. Το Node.js 20.x θα υποστηρίζεται έως τις 30 Απριλίου 2026. Η συντήρηση του προηγούμενου κλάδου Node.js 18.x LTS θα διαρκέσει έως τον Απρίλιο του 2025 και του προηγούμενου κλάδου 16.x LTS έως τον Σεπτέμβριο του 2023. Ο κλάδος 14.x LTS θα διατηρηθεί στις 30 Απριλίου και ο προσωρινός κλάδος Node.js 19.x την 1η Ιουνίου.

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

  • Ο κινητήρας V8 έχει ενημερωθεί στην έκδοση 11.3, η οποία χρησιμοποιείται στο Chromium 113. Από τις αλλαγές σε σύγκριση με τον κλάδο Node.js 19, ο οποίος χρησιμοποιούσε τον κινητήρα Chromium 107, τις συναρτήσεις String.prototype.isWellFormed και toWellFormed, το Array.prototype και τις μεθόδους TypedArray.prototype για εργασία με την αντιγραφή στην αλλαγή αντικειμένων Array και TypedArray, σημαία "v" στο RegExp, υποστήριξη για αλλαγή μεγέθους του ArrayBuffer και αύξηση του μεγέθους του SharedArrayBuffer, κλήση ουράς στο WebAssembly.
  • Προτείνεται ένας πειραματικός μηχανισμός Μοντέλου Άδειας που σας επιτρέπει να περιορίσετε την πρόσβαση σε ορισμένους πόρους κατά την εκτέλεση. Η υποστήριξη μοντέλου άδειας ενεργοποιείται καθορίζοντας τη σημαία "--experimental-permission" κατά την εκτέλεση. Στην αρχική υλοποίηση, προτάθηκαν επιλογές περιορισμού της πρόσβασης εγγραφής (--allow-fs-write) και ανάγνωσης (--allow-fs-read) σε ορισμένα τμήματα του FS, θυγατρικές διεργασίες (--allow-child-process) , πρόσθετα (--no-addons ) και νήματα (--allow-worker). Για παράδειγμα, για να επιτρέψετε την εγγραφή στον κατάλογο /tmp και την ανάγνωση του αρχείου /home/index.js, μπορείτε να καθορίσετε: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js index .js

    Για να ελέγξετε την πρόσβαση, προτείνεται να χρησιμοποιήσετε τη μέθοδο process.permission.has(), για παράδειγμα, "process.permission.has('fs.write',"/tmp/test").

  • Οι χειριστές για εξωτερικές μονάδες ECMAScript (ESM) που έχουν φορτωθεί μέσω της επιλογής "--experimental-loader" εκτελούνται τώρα σε ξεχωριστό νήμα, απομονωμένο από το κύριο νήμα, το οποίο εξαλείφει τη διασταύρωση του κώδικα εφαρμογής και των φορτωμένων μονάδων ESM. Παρόμοια με τα προγράμματα περιήγησης, η μέθοδος import.meta.resolve() εκτελείται πλέον συγχρονισμένα όταν καλείται μέσα από μια εφαρμογή. Σε έναν από τους επόμενους κλάδους του Node.js, η υποστήριξη φόρτωσης ESM σχεδιάζεται να μετακινηθεί στην κατηγορία των σταθερών λειτουργιών.
  • Η λειτουργική μονάδα node:test (test_runner), που έχει σχεδιαστεί για τη δημιουργία και εκτέλεση δοκιμών JavaScript που επιστρέφουν αποτελέσματα σε μορφή TAP (Test Anything Protocol), έχει μεταφερθεί σε σταθερό.
  • Έχει δημιουργηθεί μια ξεχωριστή ομάδα απόδοσης, η οποία, στο πλαίσιο της προετοιμασίας για το νέο κλάδο, έχει εργαστεί για να επιταχύνει διάφορα στοιχεία χρόνου εκτέλεσης, συμπεριλαμβανομένων της ανάλυσης URL, της fetch() και του EventTarget. Για παράδειγμα, η επιβάρυνση της προετοιμασίας του EventTarget έχει μειωθεί κατά το ήμισυ, η απόδοση της μεθόδου URL.canParse() έχει βελτιωθεί σημαντικά και η αποτελεσματικότητα των χρονόμετρων έχει βελτιωθεί. Επιπλέον, η κυκλοφορία ενός αναλυτή URL υψηλής απόδοσης - Ada 2.0, γραμμένου σε C ++, περιλαμβάνεται στη σύνθεση.
  • Συνεχίστηκε η ανάπτυξη μιας πειραματικής δυνατότητας για την παράδοση εφαρμογών με τη μορφή ενός μόνο εκτελέσιμου αρχείου (SEA, Single Executable Applications). Η δημιουργία ενός εκτελέσιμου αρχείου απαιτεί τώρα την αντικατάσταση ενός blob που δημιουργείται από ένα αρχείο διαμόρφωσης JSON (αντί της αντικατάστασης ενός αρχείου JavaScript).
  • Βελτιωμένη συμβατότητα Web Crypto API με υλοποιήσεις από άλλα έργα.
  • Προστέθηκε επίσημη υποστήριξη για Windows σε συστήματα ARM64.
  • Συνεχής υποστήριξη για επεκτάσεις WASI (WebAssembly System Interface) για τη δημιουργία αυτόνομων εφαρμογών WebAssembly. Καταργήθηκε η ανάγκη καθορισμού μιας ειδικής σημαίας γραμμής εντολών για την ενεργοποίηση της υποστήριξης WASI.

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

Για να διασφαλίσει την επεξεργασία μεγάλου αριθμού παράλληλων αιτημάτων, το 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

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