Platform JavaScript bahagian pelayan Node.js 20.0 tersedia

Pengeluaran Node.js 20.0, platform untuk melaksanakan aplikasi rangkaian dalam JavaScript, telah berlaku. Node.js 20.0 telah diperuntukkan kepada cawangan sokongan panjang, tetapi status ini tidak akan diberikan sehingga Oktober, selepas penstabilan. Node.js 20.x akan disokong sehingga 30 April 2026. Penyelenggaraan cawangan Node.js 18.x LTS sebelumnya akan berlangsung sehingga April 2025, dan cawangan 16.x LTS sebelumnya sehingga September 2023. Cawangan 14.x LTS akan dikekalkan pada 30 April dan cawangan sementara Node.js 19.x pada 1 Jun.

Penambahbaikan utama:

  • Enjin V8 telah dikemas kini kepada versi 11.3, yang digunakan dalam Chromium 113. Daripada perubahan berbanding cawangan Node.js 19, yang menggunakan enjin Chromium 107, fungsi String.prototype.isWellFormed dan toWellFormed, Array.prototype dan kaedah TypedArray.prototype untuk berfungsi dengan salinan pada perubahan objek Array dan TypedArray, bendera "v" dalam RegExp, sokongan untuk mengubah saiz ArrayBuffer dan meningkatkan saiz SharedArrayBuffer, tail-call dalam WebAssembly.
  • Mekanisme Model Kebenaran percubaan dicadangkan yang membolehkan anda menyekat akses kepada sumber tertentu semasa pelaksanaan. Sokongan Model Kebenaran didayakan dengan menentukan bendera "--experimental-permission" semasa berjalan. Dalam pelaksanaan awal, pilihan telah dicadangkan untuk menyekat akses tulis (--allow-fs-write) dan baca (--allow-fs-read) kepada bahagian tertentu FS, proses anak (--allow-child-process) , alat tambah (--no-addons ) dan benang (--allow-worker). Sebagai contoh, untuk membenarkan penulisan ke direktori /tmp dan membaca fail /home/index.js, anda boleh menentukan: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js indeks .js

    Untuk menyemak akses, adalah dicadangkan untuk menggunakan kaedah process.permission.has(), sebagai contoh, "process.permission.has('fs.write',"/tmp/test").

  • Pengendali untuk modul luaran (ESM) ECMAScript yang dimuatkan melalui pilihan "--experimental-loader" kini dilaksanakan dalam urutan berasingan, diasingkan daripada utas utama, yang menghapuskan persilangan kod aplikasi dan modul ESM yang dimuatkan. Sama seperti pelayar, kaedah import.meta.resolve() kini dilaksanakan secara serentak apabila dipanggil dari dalam aplikasi. Dalam salah satu cabang Node.js yang seterusnya, sokongan pemuatan ESM dirancang untuk dipindahkan ke kategori ciri yang stabil.
  • Modul node:test (test_runner), yang direka untuk mencipta dan menjalankan ujian JavaScript yang mengembalikan hasil dalam format TAP (Test Anything Protocol), telah dialihkan kepada stabil.
  • Pasukan prestasi berasingan telah dibentuk, yang, sebagai persediaan untuk cawangan baharu, telah berusaha untuk mempercepatkan pelbagai komponen masa jalan, termasuk parsing URL, fetch() dan EventTarget. Contohnya, overhed untuk memulakan EventTarget telah dikurangkan separuh, prestasi kaedah URL.canParse() telah dipertingkatkan dengan ketara dan kecekapan pemasa telah dipertingkatkan. Di samping itu, keluaran penghurai URL berprestasi tinggi - Ada 2.0, yang ditulis dalam C ++, disertakan dalam gubahan.
  • Pembangunan ciri percubaan untuk menghantar aplikasi dalam bentuk fail boleh laku tunggal (SEA, Aplikasi Boleh Laku Tunggal) telah diteruskan. Mencipta boleh laku sekarang memerlukan menggantikan gumpalan yang dijana daripada fail konfigurasi JSON (bukan menggantikan fail JavaScript).
  • Keserasian API Web Crypto yang dipertingkatkan dengan pelaksanaan daripada projek lain.
  • Menambah sokongan rasmi untuk Windows pada sistem ARM64.
  • Sokongan berterusan untuk sambungan WASI (WebAssembly System Interface) untuk mencipta aplikasi WebAssembly kendiri. Mengalih keluar keperluan untuk menentukan bendera baris arahan khas untuk membolehkan sokongan WASI.

Platform Node.js boleh digunakan untuk penyelenggaraan pelayan aplikasi Web dan untuk mencipta program rangkaian pelanggan dan pelayan biasa. Untuk mengembangkan fungsi aplikasi untuk Node.js, koleksi modul yang besar telah disediakan, di mana anda boleh mencari modul dengan pelaksanaan HTTP, SMTP, XMPP, DNS, FTP, IMAP, pelayan dan klien POP3, modul untuk penyepaduan dengan pelbagai rangka kerja web, pengendali WebSocket dan Ajax , penyambung DBMS (MySQL, PostgreSQL, SQLite, MongoDB), enjin templat, enjin CSS, pelaksanaan algoritma kripto dan sistem kebenaran (OAuth), penghurai XML.

Untuk memastikan pemprosesan sejumlah besar permintaan selari, Node.js menggunakan model pelaksanaan kod tak segerak berdasarkan pengendalian acara tanpa sekatan dan takrifan pengendali panggil balik. Kaedah yang disokong untuk pemultipleksan sambungan ialah epoll, kqueue, /dev/poll, dan pilih. Untuk pemultipleksan sambungan, perpustakaan libuv digunakan, yang merupakan tambahan untuk libev pada sistem Unix dan IOCP pada Windows. Pustaka libeio digunakan untuk mencipta kumpulan benang, dan c-ares disepadukan untuk melaksanakan pertanyaan DNS dalam mod tidak menyekat. Semua panggilan sistem yang menyebabkan penyekatan dilaksanakan di dalam kumpulan benang dan kemudian, seperti pengendali isyarat, memindahkan hasil kerja mereka kembali melalui paip (paip) yang tidak dinamakan. Pelaksanaan kod JavaScript disediakan melalui penggunaan enjin V8 yang dibangunkan oleh Google (selain itu, Microsoft sedang membangunkan versi Node.js dengan enjin Chakra-Core).

Pada terasnya, Node.js adalah serupa dengan Perl AnyEvent, Mesin Acara Ruby, rangka kerja Python Twisted dan pelaksanaan acara Tcl, tetapi gelung acara dalam Node.js disembunyikan daripada pembangun dan menyerupai pengendalian acara dalam aplikasi web yang berjalan. dalam pelayar. Apabila menulis aplikasi untuk node.js, anda perlu mempertimbangkan khusus pengaturcaraan dipacu peristiwa, sebagai contoh, dan bukannya melakukan "var result = db.query("select..");" dengan menunggu penyiapan kerja dan pemprosesan hasil seterusnya, Node.js menggunakan prinsip pelaksanaan tak segerak, i.e. kod diubah menjadi "db.query("select..", function (result) {result processing});", di mana kawalan akan serta-merta beralih kepada kod selanjutnya, dan hasil pertanyaan akan diproses apabila data tiba.

Sumber: opennet.ru

Tambah komen