Node.js v20'deki Yenilikler (Test Çalıştırıcısı, İzin Modeli, SEA, V8 JS Engine 11.3)
Yayınlanan: 2023-04-28Node.js v20 artık kullanıma hazır! 18 Nisan 2023 tarihinde halka açıldı ve artık herkes tarafından kullanılabilir. Bu sürümle, Node.js çok daha güvenli olmalı ve daha iyi performans göstermelidir.
Bilmek önemlidir — bu çift sayılı bir sürüm olduğundan, Ekim 2023'te uzun vadeli destek (LTS) sürümü haline gelmesi planlanıyor ve Nisan 2026'ya kadar desteklenecek. Ancak, Node.js ekibi aktif olarak topluluk arıyor LTS'ye yükseltilmeden önce sorunları belirlemek ve düzeltmek için geri bildirim.
Node.js'nin bu yeni sürümü, deneysel İzin Modeli, kararlı bir test çalıştırıcısı olan senkronize import.meta.resolve
, V8 JavaScript motorunu sürüm 11.3'e güncelleyerek performans iyileştirmeleri ve hatalar gibi geliştiricilerin kesinlikle takdir edeceği heyecan verici güncellemeler ve özellikler getiriyor. düzeltmeler ve çok daha fazlası.
Bu makalede, Node.js v20'de sunulan değişiklikleri keşfederek yeni özellik ve yeteneklerine derinlemesine bir bakış sunacaksınız.
Node.js v20'ye Başlarken
Node.js v20'yi yüklemek, Node.js'nin diğer sürümlerine oldukça benzer. Tek yapmanız gereken:
- Yükleyici paketini resmi Node.js web sitesinden indirin.
- Yükleyiciyi indirdikten sonra çalıştırın ve yükleme işlemini tamamlamak için talimatları izleyin. Bu süreç oldukça basittir ve sadece lisans sözleşmesini kabul etmeniz ve "İleri" düğmesini tıklamanız yeterlidir.
- Tüm değişikliklerin etkili olmasını sağlamak için kurulum işlemi tamamlandıktan sonra Sisteminizi/Makinenizi yeniden başlatın.
- Aşağıdaki komutu çalıştırarak Node.js kurulumunuzu doğrulayın:
node -v
Sürüm numarasını (v20.0.0) görüyorsanız bu, Node.js'nin doğru yüklendiği ve Node.js v20 ile çalışmaya hazır olduğunuz anlamına gelir.
Node.js v20'deki Yenilikler Neler?
Bu Node.js sürümüyle sunulan 5 ana güncellemeyi keşfedelim. Bu özellikler şunları içerir:
Deneysel İzin Modeli
Node.js v20'de deneysel İzin Modeli'nin tanıtılması, geliştiricilere yürütme sırasında belirli kaynaklara erişim üzerinde daha fazla kontrol sağlayan önemli bir eklemedir.
Bu yeni özellik, üretim ortamı gibi güvenlik ve kaynak kullanımının kritik olduğu durumlarda faydalıdır.
İzin Modeli, dosya sistemine erişimi kısıtlama, child_process, işçi_threads ve yerel eklentiler dahil olmak üzere çeşitli yeteneklerle birlikte gelir.
Geliştiriciler, hangi kaynakların erişilebilir olduğunu belirtmek için --allow-fs-read
, --allow-fs-write
ve --allow-child-process
gibi işaretleri kullanabilir. Bu bayrakları etkinleştirmek için, geliştiricilerin --experimental-permission
bayrağını gerekli izinlerle birlikte kullanması gerekir.
İşte tüm dosya sistemine okuma ve yazma erişimine izin vermek için İzin Modeli'nin nasıl kullanılacağına dair bir örnek:
$ node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js
Geliştiriciler, belirli klasörlere ve dosyalara erişimi belirtmek için İzin Modeli'ni de kullanabilir. Örneğin, aşağıdaki komut /tmp/ klasörüne yazma erişimi sağlar:
$ node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js
İzin Modeli'nin önemli faydalarından biri, dosya sisteminin erişimi üzerinde daha ayrıntılı kontrol uygulama yeteneğidir. Örneğin geliştiriciler, belirli klasörlere veya dosyalara erişime izin vermek için yollar ve joker karakter kalıpları belirtebilir.
$ node --experimental-permission --allow-fs-read=/home/user/* index.js
Yukarıdaki komut , /home/user/ dizini içindeki tüm klasörlere okuma erişimi sağlar.
İşlem nesnesinin allow özelliği, çalışma zamanında belirli bir iznin verilip verilmediğini kontrol etmek için de kullanılabilir. Örneğin, Node.js işleminizin /home/user/documents adlı belirli bir klasöre okuma erişimi olup olmadığını kontrol etmek istiyorsanız, aşağıdaki kodu kullanabilirsiniz:
if (process.permission.has('fs.read', '/home/user/documents')) { console.log('Read access granted to /home/user/documents'); } else { console.log('Read access not granted to /home/user/documents'); }
İzin Modeli'ni kullanarak, Node.js işlemlerinizin dosya sistemi erişimi üzerinde daha ayrıntılı denetime sahip olursunuz, bu da daha iyi güvenlik ve daha verimli kaynak kullanımına yol açabilir.
İzin Modeli'nin hala deneysel olduğunu ve Node.js'nin gelecekteki sürümlerinde değişebileceğini not etmek çok önemlidir. İzin Modeli belgeleriyle güncel kalmanız ve bu deneysel özellikleri kullanırken dikkatli olmanız önerilir.
Kararlı Test Çalıştırıcısı
Node.js v20, geliştiricilerin ek bağımlılıklar kurmadan JavaScript test takımlarını hızlı ve kolay bir şekilde oluşturup çalıştırmasını sağlayan test_runner modülünün kararlı bir sürümünü içerir.
Kararlı test çalıştırıcısı artık, test dosyalarını yazmak ve yapılandırmak için describe
, it
/ test
ve kancalar gibi çeşitli yapı taşlarının yanı sıra alay etme, izleme modu ve node --test
komutu
İşte test çalıştırıcının nasıl kullanılacağına dair bir örnek:
import { test, mock } from 'node:test'; import assert from 'node:assert'; import fs from 'node:fs'; mock.method(fs, 'readFile', async () => "Hello World"); test('synchronous passing test', async (t) => { // This test passes because it does not throw an exception. assert.strictEqual(await fs.readFile('a.txt'), "Hello World"); });
Test çalıştırıcı --test-reporter
bayrağı aracılığıyla yapılandırılabilir ve özel test muhabirleri, --experimental-test-coverage
bayrağı aracılığıyla deneysel test kapsamı ve alay etme yetenekleri sunar.
Jest veya Mocha gibi tam özellikli test çerçevelerinin yerini alması amaçlanmasa da kararlı test çalıştırıcı, test paketleri oluşturmak için basit ve hızlı bir yol sunar. Node.js v19 sürümünde kullanıma sunulmasından bu yana önemli ölçüde geliştirildi ve son kullanıcı testleri ve geri bildirimleri sayesinde artık Node.js v20 sürümünde kararlı olarak işaretlendi.
Bu birleştirilmiş çekme isteğinde daha fazla bilgi bulunabilir.
V8 JavaScript Motoru 11.3'e Güncellendi
Node.js'ye güç veren V8 JavaScript motoru, Node.js v20'de 11.3 sürümüne güncellendi. Bu, gelişmiş performans sağlar ve yeni dil özellikleri sunar. Bu güncellemenin içerdiği yeni özelliklerden bazıları:
-
String.prototype.isWellFormed
vetoWellFormed
: Bu yöntemler, özellikle uygun dize formatını sağlamak için kullanışlıdır. Bu, kullanıcı dizisi girişinin doğru UTF-16 biçiminde olmasını sağlamaya yardımcı olarak emoji çağındaki hataları azaltır. - Array ve TypedArray'i kopyalayarak değiştiren yöntemler: Bu, orijinal verileri etkilemeden dizilerin değiştirilmiş kopyalarını oluşturmak için yararlı olabilir; bu, özellikle karşılaştırma veya başka amaçlar için orijinal verileri korumanız gereken durumlarda geçerlidir.
- Yeniden boyutlandırılabilir
ArrayBuffer
ve büyütülebilirSharedArrayBuffer
: daha verimli bellek ayırmaya izin vererek daha fazla esneklik sağlar. - Ayarlanmış gösterim ve dizelerin özelliklerine sahip RegExp v bayrağı: normal ifadeler için işlevsellik ekler.
- WebAssembly kuyruk çağrısı: belirli işlev çağrısı türlerini optimize etmenin bir yolunu sağlar.
Bu güncellemeler, Node.js geliştirme topluluğunun performansı ve işlevselliği geliştirmeye devam eden taahhüdünü gösterir.
Eşzamanlı import.meta.resolve()
Node.js v20'de, konuma duyarlı olmayan betiklerin yazılmasını kolaylaştıran import.meta.resolve()
kullanıma sunulmuştur. Bu işlev, tarayıcı davranışına benzer şekilde eşzamanlı olarak geri döner ve daha verimli yürütmeye olanak tanır.
Kullanıcı yükleyici çözümleme kancaları yine de bir eşzamansız işlev olarak tanımlanabilir, ancak import.meta.resolve()
eşzamansız çözümleme kancaları yüklenmiş olsa bile uygulama kodu için eşzamanlı olarak dönmeye devam eder.
import.meta.resolve()
öğesinin eşzamanlı davranışı, özellikle büyük miktarda veriyle uğraşırken daha verimli kod yürütülmesine olanak tanır. Bir yazar olarak, çözümleme kancalarını tercihinize bağlı olarak zaman uyumsuz veya eşitleme işlevleri olarak tanımlayabilirsiniz. Uygulama kodu, yüklenen zaman uyumsuz çözümleme kancaları olup olmadığına bakılmaksızın eşzamanlı olarak yürütülür.
Deneysel Tek Çalıştırılabilir Uygulamalar (SEA)
Deneysel Tek Yürütülebilir Uygulamalar (SEA), Node.js v20'de tanıtılan ve uygulamanızı Node.js ikili dosyasıyla bir araya getirerek son kullanıcıların tek bir yürütülebilir dosya olarak dağıtmasına ve çalıştırmasına olanak tanıyan yeni bir özelliktir.
Bu, topluluktan uzun süredir gelen bir talepti ve ekip geçen yıl içinde yaklaşımı iyileştirdi.
Node.js v20'de tek bir yürütülebilir uygulama oluşturmak, ham JS dosyasını enjekte etmek yerine Node.js tarafından hazırlanan bir JSON yapılandırmasından bir blobun enjekte edilmesini gerektirir.
Blob, bu durumda Node.js tarafından hazırlanan ve ikili dosyaya eklenen ikili verileri içeren bir dosyadır. Bu değişiklik, birlikte var olan birden çok kaynağın SEA'ya dahil edilmesini sağlamak için yapıldı ve bu da yeni kullanım örneklerine yol açtı.
İşte bir sea-config.jso n dosyası örneği:
{ "main": "myscript.js", "output": "sea-prep.blob" }
node --experimental-sea-config sea-config.json
ile yürütüldüğünde, blob sea-prep.blob dosyasına yazılır ve bu daha sonra ikili dosyaya enjekte edilebilir.
SEA özelliği, geliştiricilerin Node.js uygulamalarını, kullanıcıların Node.js'yi yüklemesine gerek kalmadan dağıtmasına olanak tanır. İşlevsellik, OpenJS World'de JavaScriptLandia Ödüllerinin bir parçası olarak Yeni Bir Varıştan Olağanüstü Katkı ödülünü kazanan Darshan Sen tarafından oluşturuldu.
Bir OpenJS Vakfı üyesi olan Microsoft, vektör saldırılarını azaltmanın ve daha iyi bir deneyim için Node.js mimarisini güçlendirmenin bir yolu olarak bu özelliği araştırıyor. SEA özelliği hala deneysel olsa da, Node.js topluluğu için heyecan verici yeni bir gelişmeyi temsil ediyor.
Verim
Node.js v20, yeni kurulan Node.js performans ekibi tarafından performansa yenilenen bir odaklanma ile çalışma süresinde önemli iyileştirmelerle birlikte gelir. İyileştirmeler, çalışma zamanının URL, fetch()
ve EventTarget
gibi temel bölümlerinde yapılan iyileştirmeleri içerir.
Kayda değer iyileştirmelerden biri, EventTarget
başlatma maliyetinin yarı yarıya düşürülmesi ve onu kullanan tüm alt sistemlere daha hızlı erişim sağlanmasıdır. Ek olarak, URL.canParse()
ve zamanlayıcılar gibi API'lerde performansı artırmak için V8 Fast API çağrıları kullanılmıştır.
Diğer bir özel değişiklik ise, C++ ile yazılmış hızlı ve spesifikasyonlarla uyumlu bir URL ayrıştırıcı olan Ada'nın güncellenmiş 2.0 sürümünün dahil edilmesidir.
Özet
Bu makalede, Node.js v20'nin getirdiği V8 JavaScript motorundaki iyileştirmeler, performans, test çalıştırıcı ve deneysel izin modelinin tanıtımı ve tek yürütme uygulamaları gibi bazı önemli özellikleri (deneysel ve kararlı) ve iyileştirmeleri öğrendiniz. .
Node.js v14'ün Nisan 2023'te Kullanım Ömrünün Sonuna gideceğini bilmek önemlidir, bu nedenle Node.js v18 (LTS) veya vNode.js 20'ye (yakında LTS olacak) yükseltmeyi planlamaya başlamanız önerilir.
Node.js'nin son sürümünü denemek ister misiniz? Bunu, Node.js uygulamanızı Kinsta'da dağıtarak yapabilirsiniz ve ilk 20$'ınızı bizden alabilirsiniz. Node.js v20'yi zaten destekliyoruz, yani yeni özelliklerini ve yeteneklerini bugünden itibaren test edebilirsiniz.
Şimdi senin sıran! Node.js v20'de en ilginç bulduğunuz özellikler veya geliştirmeler nelerdir? Gözden kaçırmış olabileceğimiz önemli şeyler var mı? Yorumlarda bize bildirin.