Sunucu tarafı JavaScript platformu Node.js 20.0 mevcut

JavaScript'te ağ uygulamalarını yürütmek için bir platform olan Node.js 20.0'ın piyasaya sürülmesi gerçekleşti. Node.js 20.0, uzun destek şubesine atandı, ancak bu durum, stabilizasyonun ardından Ekim ayına kadar atanmayacak. Node.js 20.x, 30 Nisan 2026'ya kadar desteklenecektir. Önceki Node.js 18.x LTS şubesinin bakımı Nisan 2025'e kadar ve önceki 16.x LTS şubesinin bakımı Eylül 2023'e kadar sürecek. 14.x LTS şubesi 30 Nisan'da ve Node.js 19.x geçici şubesi 1 Haziran'da durdurulacak.

Ana iyileştirmeler:

  • V8 motoru, Chromium 11.3'te kullanılan 113 sürümüne güncellendi. Chromium 19 motorunu, String.prototype.isWellFormed ve toWellFormed işlevlerini kullanan Node.js 107 şubesine kıyasla değişikliklerden Array.prototype ve TypedArray.prototype yöntemleri, Array ve TypedArray nesnelerinin değiştirilmesinde kopyalama, RegExp'te "v" bayrağı, ArrayBuffer'ı yeniden boyutlandırma ve SharedArrayBuffer boyutunu artırma desteği, WebAssembly'de kuyruk çağrısı.
  • Yürütme sırasında belirli kaynaklara erişimi kısıtlamanıza izin veren deneysel bir İzin Modeli mekanizması önerilmiştir. İzin Modeli desteği, çalışırken "--deneysel izin" bayrağı belirtilerek etkinleştirilir. İlk uygulamada, FS'nin belirli bölümlerine, alt süreçlere (--allow-child-process) yazma (--allow-fs-write) ve okuma (--allow-fs-read) erişimini kısıtlamak için seçenekler önerildi. , eklentiler (--no-addons ) ve ileti dizileri (--allow-worker). Örneğin, /tmp dizinine yazmaya ve /home/index.js dosyasını okumaya izin vermek için şunu belirtebilirsiniz: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js dizini .js

    Erişimi kontrol etmek için process.permission.has() yönteminin kullanılması önerilir, örneğin "process.permission.has('fs.write',"/tmp/test").

  • "--deneysel-yükleyici" seçeneği aracılığıyla yüklenen ECMAScript harici modülleri (ESM'ler) için işleyiciler artık ana iş parçacığından izole edilmiş, uygulama kodu ile yüklenen ESM modüllerinin kesişmesini ortadan kaldıran ayrı bir iş parçacığında yürütülüyor. Tarayıcılara benzer şekilde, import.meta.resolve() yöntemi artık bir uygulama içinden çağrıldığında eşzamanlı olarak yürütülür. Node.js'nin sonraki dallarından birinde, ESM yükleme desteğinin kararlı özellikler kategorisine taşınması planlanıyor.
  • Sonuçları TAP (Her Şeyi Test Et Protokolü) biçiminde döndüren JavaScript testleri oluşturmak ve çalıştırmak için tasarlanan node:test (test_runner) modülü kararlı hale getirildi.
  • URL ayrıştırma, fetch() ve EventTarget dahil olmak üzere çeşitli çalışma zamanı bileşenlerini hızlandırmak için yeni dal için hazırlık yapan ayrı bir performans ekibi oluşturuldu. Örneğin, EventTarget başlatma yükü yarıya indirildi, URL.canParse() yönteminin performansı önemli ölçüde iyileştirildi ve zamanlayıcıların etkinliği iyileştirildi. Ek olarak, yüksek performanslı bir URL ayrıştırıcısının - C ++ ile yazılmış Ada 2.0'ın piyasaya sürülmesi bileşime dahil edilmiştir.
  • Uygulamaları tek bir yürütülebilir dosya (SEA, Tek Yürütülebilir Uygulamalar) biçiminde sunmaya yönelik deneysel bir özelliğin geliştirilmesine devam edilmiştir. Yürütülebilir bir dosya oluşturmak artık bir JSON yapılandırma dosyasından oluşturulan bir blobun değiştirilmesini gerektiriyor (bir JavaScript dosyasının yerine).
  • Diğer projelerin uygulamalarıyla geliştirilmiş Web Crypto API uyumluluğu.
  • ARM64 sistemlerinde Windows için resmi destek eklendi.
  • Bağımsız WebAssembly uygulamaları oluşturmak için WASI (WebAssembly System Interface) uzantıları için sürekli destek. WASI desteğini etkinleştirmek için özel bir komut satırı bayrağı belirtme ihtiyacı kaldırıldı.

Node.js platformu, hem Web uygulamalarının sunucu bakımı için hem de düzenli istemci ve sunucu ağ programları oluşturmak için kullanılabilir. Node.js uygulamalarının işlevselliğini genişletmek için, içinde HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 sunucuları ve istemcileri, entegrasyon modülleri uygulayan modüller bulabileceğiniz geniş bir modül koleksiyonu hazırlanmıştır. çeşitli web çerçeveleri, WebSocket ve Ajax işleyicileri , DBMS konektörleri (MySQL, PostgreSQL, SQLite, MongoDB), şablon oluşturma motorları, CSS motorları, kripto algoritmaları ve yetkilendirme sistemleri (OAuth), XML ayrıştırıcıları ile.

Node.js, çok sayıda paralel isteğin işlenmesini sağlamak için engellemeyen olay işlemeye ve geri arama işleyicilerinin tanımına dayalı eşzamansız bir kod yürütme modeli kullanır. Bağlantıları çoğaltmak için desteklenen yöntemler epoll, kqueue, /dev/poll ve select'tir. Bağlantı çoğullama için Unix sistemlerde libev ve Windows üzerinde IOCP için bir eklenti olan libuv kitaplığı kullanılır. libeio kitaplığı bir iş parçacığı havuzu oluşturmak için kullanılır ve c-ares, engellemesiz modda DNS sorguları gerçekleştirmek için entegre edilmiştir. Engellemeye neden olan tüm sistem çağrıları, iş parçacığı havuzunda yürütülür ve ardından, sinyal işleyiciler gibi, çalışmalarının sonucunu adsız bir kanal (boru) aracılığıyla geri aktarır. JavaScript kodunun yürütülmesi, Google tarafından geliştirilen V8 motorunun kullanılmasıyla sağlanır (ayrıca Microsoft, Chakra-Core motoruyla Node.js'nin bir sürümünü geliştirmektedir).

Node.js özünde Perl AnyEvent, Ruby Event Machine, Python Twisted çerçeveleri ve Tcl olay uygulamasına benzer, ancak Node.js'deki olay döngüsü geliştiriciden gizlenir ve çalışan bir web uygulamasındaki olay işlemeye benzer. tarayıcıda. node.js için uygulama yazarken, örneğin "var result = db.query("select..");" yapmak yerine olay güdümlü programlamanın özelliklerini göz önünde bulundurmanız gerekir. işin tamamlanmasını ve ardından sonuçların işlenmesini bekleyen Node.js, eşzamansız yürütme ilkesini kullanır, yani. kod "db.query("select..", function (result) {sonuç işleme});" biçimine dönüştürülür, burada denetim anında diğer koda geçer ve veri geldikçe sorgu sonucu işlenir.

Kaynak: opennet.ru

Yorum ekle