Node.js 23.0.0, פלטפורמה להפעלת יישומי רשת ב-JavaScript, שוחררה. Node.js 23.0 מסווג כסניף ביניים, שייתמך למשך 7 חודשים (עד יוני 2025). בימים הקרובים תושלם התייצבות סניף Node.js 22, שיקבל סטטוס LTS ב-29 באוקטובר וייתמך עד אפריל 2027. התמיכה בסניפי LTS קודמים של Node.js 20.x ו-18.x תימשך עד אפריל 2026 ו-2025, בהתאמה.
שיפורים עיקריים:
- נוספה תמיכה ניסיונית עבור TypeScript, המאפשרת הגדרות סוגים מפורשות. התמיכה מופעלת באמצעות האפשרויות "--experimental-strip-types" ו-"--experimental-transform-types". במקרה של האפשרות הראשונה, העבודה עם TypeScript מצטמצמת לניקוי הגדרות טיפוס ספציפיות לשפה (בדיקת סוגים לא מתבצעת, הקוד פשוט מומר ל-JavaScript ללא סוג). האפשרות השנייה ממירה כמה מרכיבי תחביר של TypeScript, כגון enums ומרחבי שמות, לקוד JavaScript.
- מופעלת כברירת מחדל היא היכולת להשתמש בקריאה "require()" כדי לטעון מודולי JavaScript ESM (ECMAScript Modules) במצב סינכרוני. מודולי ESM משמשים בדפדפנים ומחליפים מודולי CommonJS ספציפיים ל-Node.js. כדי לטעון באמצעות "require()" ב-Node.js, מודול ESM חייב להתבצע באופן סינכרוני (ללא המתנה ברמה העליונה).
- מסופק זיהוי אוטומטי של מודולי ESM בקבצים ללא או עם סיומת ".js". בעבר, קבצים כאלה טופלו כמודולים של CommonJS אלא אם הסוג שלהם צוין במפורש בקובץ package.json שנמצא באותה ספרייה ("סוג": "מודול"). בגרסה החדשה, עבור קבצים שהסוג שלהם לא מצוין ב-package.json, הוא מנסה קודם כל לטעון כמודול CommonJS, ואם זה נכשל, אז כמודול ESM.
- יישום ניסיוני נוסף תואם לדפדפנים ממשק ה-API של אחסון האינטרנט מיועד לאחסון קבוע (מחלקה localStorage) או זמני (מחלקה sessionStorage) של נתוני מפתח/ערך. הפעלת תמיכה באחסון האינטרנט דורשת הפעלת ממשק ה-API עם הדגל "--experimental-webstorage" וציון הנתיב לקובץ האחסון באמצעות הדגל "--localstorage-file".
- נוסף SQLite API ניסיוני לעבודה עם מסדי נתונים באמצעות שפת השאילתות ואחסון SQL המבוסס על ספריית SQLite. בנוסף לאחסון מסד הנתונים בקובץ בדיסק, ניתן למקם אותו גם בזיכרון על ידי ציון ":memory:" במקום שם הקובץ. ה-Web Storage API שהוזכר לעיל מיושם גם על גבי SQLite, וכתוצאה מכך הוספת SQLite כתלות עבור Node.js.
- הפקודה "node —run" הוכרזה יציבה, שנועדה להריץ סקריפטים שהוגדרו בקובץ package.json.
- הטמיעה תמיכה אופציונלית לאחסון קוד הידור במטמון בדיסק כדי להאיץ משמעותית את השקת המודולים. שמירה במטמון מופעלת באמצעות משתנה הסביבה NODE_COMPILE_CACHE. מבחינת מטרתה, התכונה דומה לחבילת v8-compile-cache, אך שונה בביצועים גבוהים יותר ובתמיכה במודולי ESM.
- אובייקט Buffer עבר אופטימיזציה כדי להגדיל באופן משמעותי את הביצועים של השיטות Buffer.copy() ו-Buffer.write().
- הביצועים של מודול node:fs שופרו, מה שמפחית גם את מספר הקריאות לקוד C++ במהלך הפעולה.
- מנוע ה-V8 עודכן לגרסה 12.9, בשימוש ב-Chromium 129.
- התמיכה במערכות Windows 32 סיביות הוסרה.
- עקב הצגת התכונות המוגדרות בתקן C++8 ב-Node.js ובמנוע V20, הדרישות לגרסת המהדר GCC הוגדלו. בניית Node.js דורשת כעת לפחות GCC 12.
ניתן להשתמש בפלטפורמת Node.js הן לתמיכה בצד השרת של יישומי אינטרנט והן ליצירת תוכניות רשת סטנדרטיות בצד הלקוח ובצד השרת. כדי להרחיב את הפונקציונליות של יישומי Node.js, הוכן אוסף גדול של מודולים, כולל אלו המיישמים... שרתים ולקוחות של HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, מודולים לאינטגרציה עם מסגרות אינטרנט שונות, מטפלי 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 במצב לא חוסם. כל קריאות המערכת שגורמות לחסימה מבוצעות בתוך מאגר השרשורים ואז, כמו מטפלי אותות, מעבירות את תוצאת העבודה שלהם בחזרה דרך צינור ללא שם.
ביצוע קוד JavaScript מובטח באמצעות שימוש במנוע V8 שפותח על ידי גוגל (בנוסף, מיקרוסופט מפתחת גרסה של Node.js עם מנוע Chakra-Core). בבסיסו, Node.js דומה למסגרת Perl AnyEvent, Ruby Event Machine, Python Twisted והטמעת אירועים ב-Tcl, אך לולאת האירועים ב-Node.js מוסתרת מהמפתח ודומה לעיבוד אירועים באפליקציית אינטרנט פועל בדפדפן.
מקור: OpenNet.ru
