Platform JavaScript sisi server Node.js 20.0 tersedia

Rilis Node.js 20.0, sebuah platform untuk mengeksekusi aplikasi jaringan dalam JavaScript, telah dilakukan. Node.js 20.0 telah ditetapkan ke cabang dukungan panjang, tetapi status ini tidak akan ditetapkan hingga Oktober, setelah stabilisasi. Node.js 20.x akan didukung hingga 30 April 2026. Pemeliharaan cabang Node.js 18.x LTS sebelumnya akan berlangsung hingga April 2025, dan cabang 16.x LTS sebelumnya hingga September 2023. Cabang 14.x LTS akan dipertahankan pada 30 April, dan cabang interim Node.js 19.x pada 1 Juni.

Perbaikan utama:

  • Mesin V8 telah diperbarui ke versi 11.3, yang digunakan di Chromium 113. Perubahan dibandingkan dengan cabang Node.js 19, yang menggunakan mesin Chromium 107, fungsi String.prototype.isWellFormed dan toWellFormed, Array.prototype dan metode TypedArray.prototype untuk bekerja dengan salinan pada perubahan objek Array dan TypedArray, bendera "v" di RegExp, dukungan untuk mengubah ukuran ArrayBuffer dan meningkatkan ukuran SharedArrayBuffer, panggilan ekor di WebAssembly.
  • Mekanisme Model Izin eksperimental diusulkan yang memungkinkan Anda membatasi akses ke sumber daya tertentu selama eksekusi. Dukungan Model Izin diaktifkan dengan menentukan bendera "--experimental-permission" saat dijalankan. Pada implementasi awal, opsi diusulkan untuk membatasi akses tulis (--allow-fs-write) dan baca (--allow-fs-read) ke bagian tertentu dari FS, proses anak (--allow-child-process) , add-on (--no-addons ) dan utas (--allow-worker). Misalnya, untuk mengizinkan penulisan ke direktori /tmp dan membaca file /home/index.js, Anda dapat menentukan: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js indeks .js

    Untuk memeriksa akses, disarankan untuk menggunakan metode process.permission.has(), misalnya, "process.permission.has('fs.write',"/tmp/test").

  • Penangan untuk modul eksternal ECMAScript (ESM) yang dimuat melalui opsi "--experimental-loader" kini dijalankan dalam utas terpisah, diisolasi dari utas utama, yang menghilangkan persimpangan kode aplikasi dan memuat modul ESM. Mirip dengan browser, metode import.meta.resolve() sekarang dijalankan secara sinkron saat dipanggil dari dalam aplikasi. Di salah satu cabang Node.js berikutnya, dukungan pemuatan ESM rencananya akan dipindahkan ke kategori fitur stabil.
  • Modul node:test (test_runner), dirancang untuk membuat dan menjalankan pengujian JavaScript yang mengembalikan hasil dalam format TAP (Test Anything Protocol), telah dipindahkan ke stable.
  • Tim performa terpisah telah dibentuk, yang, dalam persiapan untuk cabang baru, telah bekerja untuk mempercepat berbagai komponen runtime, termasuk parsing URL, fetch() dan EventTarget. Misalnya, overhead menginisialisasi EventTarget telah dibelah dua, kinerja metode URL.canParse() telah ditingkatkan secara signifikan, dan efisiensi pengatur waktu telah ditingkatkan. Selain itu, rilis pengurai URL berkinerja tinggi - Ada 2.0, ditulis dalam C ++, disertakan dalam komposisi.
  • Pengembangan fitur eksperimental untuk mengirimkan aplikasi dalam bentuk file yang dapat dieksekusi tunggal (SEA, Single Executable Applications) terus berlanjut. Membuat executable sekarang membutuhkan penggantian blob yang dihasilkan dari file konfigurasi JSON (alih-alih mengganti file JavaScript).
  • Kompatibilitas Web Crypto API yang ditingkatkan dengan implementasi dari proyek lain.
  • Menambahkan dukungan resmi untuk Windows pada sistem ARM64.
  • Dukungan lanjutan untuk ekstensi WASI (WebAssembly System Interface) untuk membuat aplikasi WebAssembly mandiri. Menghapus kebutuhan untuk menentukan bendera baris perintah khusus untuk mengaktifkan dukungan WASI.

Platform Node.js dapat digunakan baik untuk pemeliharaan server aplikasi Web maupun untuk membuat program jaringan klien dan server reguler. Untuk memperluas fungsionalitas aplikasi untuk Node.js, kumpulan besar modul telah disiapkan, di mana Anda dapat menemukan modul dengan penerapan HTTP, SMTP, XMPP, DNS, FTP, IMAP, server dan klien POP3, modul untuk integrasi dengan berbagai kerangka kerja web, penangan WebSocket dan Ajax , konektor DBMS (MySQL, PostgreSQL, SQLite, MongoDB), mesin templating, mesin CSS, implementasi algoritma kripto dan sistem otorisasi (OAuth), parser XML.

Untuk memastikan pemrosesan sejumlah besar permintaan paralel, Node.js menggunakan model eksekusi kode asinkron berdasarkan penanganan peristiwa non-pemblokiran dan definisi penangan panggilan balik. Metode yang didukung untuk koneksi multiplexing adalah epoll, kqueue, /dev/poll, dan pilih. Untuk multiplexing koneksi, perpustakaan libuv digunakan, yang merupakan add-on untuk libev pada sistem Unix dan IOCP pada Windows. Pustaka libeio digunakan untuk membuat kumpulan utas, dan c-ares terintegrasi untuk melakukan kueri DNS dalam mode non-pemblokiran. Semua panggilan sistem yang menyebabkan pemblokiran dijalankan di dalam kumpulan utas dan kemudian, seperti penangan sinyal, mentransfer kembali hasil pekerjaannya melalui pipa (pipa) yang tidak disebutkan namanya. Eksekusi kode JavaScript disediakan melalui penggunaan mesin V8 yang dikembangkan oleh Google (selain itu, Microsoft sedang mengembangkan versi Node.js dengan mesin Chakra-Core).

Pada intinya, Node.js mirip dengan Perl AnyEvent, Ruby Event Machine, framework Python Twisted, dan implementasi event Tcl, tetapi event loop di Node.js disembunyikan dari pengembang dan menyerupai penanganan event di aplikasi web yang sedang berjalan di browser. Saat menulis aplikasi untuk node.js, Anda perlu mempertimbangkan spesifikasi pemrograman berbasis peristiwa, misalnya, alih-alih melakukan "var result = db.query("select..");" dengan menunggu penyelesaian pekerjaan dan pemrosesan hasil selanjutnya, Node.js menggunakan prinsip eksekusi asinkron, yaitu kode diubah menjadi "db.query("pilih..", fungsi (hasil) {pemrosesan hasil});", di mana kontrol akan langsung beralih ke kode lebih lanjut, dan hasil kueri akan diproses saat data tiba.

Sumber: opennet.ru

Tambah komentar