Uygulama

Cloudflare Workers'da Node.js uyumluluğu varsayılan hâle geldi

Platform artık 64 MiB'ye kadar uygulamaları destekliyor ve URL tabanlı bir modül kayıt sistemi sunuyor.

Cloudflare Workers'da Node.js uyumluluğu varsayılan hâle geldi
Cloudflare Workers'da Node.js uyumluluğu varsayılan hâle geldi

Kenar hesaplama platformlarının uzun süredir bilinen kısıtı, Node.js ekosistemindeki kütüphanelerin çoğunun çalışmaması oldu. Cloudflare, Workers çalışma zamanının açık kaynaklı çekirdeği workerd'deki modül kayıt sistemini yeniden yazdığını duyurdu.

Şirket son yıllarda Node.js API desteğini kademeli olarak artırmıştı; Workers artık sunucusuz bir bağlamda kullanılabilecek tüm kararlı Node.js arayüzlerini destekliyor ve bunlar varsayılan olarak açık. Boyut sınırı da genişledi: tüm planlarda 64 mebibayta kadar uygulama dağıtılabiliyor ve sıkıştırılmış paket boyutu sınırı tamamen kaldırıldı.

Ancak API uyumluluğu tek başına yeterli değil. Node.js uygulamaları, çalışma zamanının modülleri nasıl çözümlediğine, yüklediğine ve önbelleğe aldığına da bağlı. ESM, CommonJS ve WebAssembly farklı modül tipleri ve bunların tamamını yöneten sisteme modül kayıt sistemi deniyor.

Yeni sistem new_module_registry uyumluluk bayrağıyla etkinleştiriliyor ve bir dizi davranışı düzeltiyor: import.meta.url, import.meta.main ve import.meta.resolve() çalışıyor; modül adresleri sorgu dizeleri ve parçalarıyla birlikte gerçek URL olarak çözümleniyor; node: yerleşikleri hangi yoldan erişilirse erişilsin aynı modül örneğine çözümleniyor; içe aktarma öznitelikleri doğru doğrulanıyor; hata sınıfları ve mesajları tutarlı hâle geliyor.

İki değişiklik performans açısından önemli. Modüller artık ilk içe aktarıldıklarında derleniyor — yani tembel derleme, kullanılmayan kodun derlenmesini önleyerek soğuk başlatmayı hızlandırıyor. WebAssembly modülleri ise kaynak aşaması içe aktarmalarını destekliyor.

Değişikliğin arka planında pratik bir sorun var. Bugüne kadar Wrangler ya da Vite, bir Worker'ın tüm kodunu ve bağımlılıklarını esbuild kullanarak tek bir modül betiğine paketliyordu; içe aktarma ve require() çağrıları sıradan fonksiyonlara dönüştürülüyordu. Paket çalışma zamanına ulaştığında ortada neredeyse bir modül grafiği kalmıyordu — şirket bu betiklerin yüz binlerce satıra ulaştığını görmüş. Bunun nedeni teknik bir zorunluluk değil, çalışma zamanının modülleri diğer ortamlarla tutarlı biçimde çözümlememesiydi.

Yorumlar (0)

Bu içeriğe henüz yorum yapılmamış.

E-posta adresiniz yayımlanmaz, yalnızca moderasyon için saklanır. Ayrıntı için gizlilik politikasını. Giriş yaparsanız yorumunuz adınıza kaydolur.

Yorumlar yayınlanmadan önce moderasyondan geçer.