Deno Öğrenin ve Node.js'nin Ötesine Geçin
Yayınlanan: 2023-04-20Node.js, büyük bir farkla en çok kullanılan sunucu tarafı JavaScript çalışma zamanı olmaya devam etse de, Deno ve Bun gibi alternatif çalışma zamanları, Node.js konseptini geliştirmeye çalışırken dikkatleri üzerine topladı.
İki yeni çalışma zamanından daha popüler olan Deno, Node.js'de bulunan bazı güvenlik sorunlarını ele alır ve TypeScript ve WebAssembly gibi teknolojiler için daha kapsamlı destek sağlar.
Bu makalede, Deno'nun temellerini keşfedecek, Node.js ve Bun ile karşılaştırmasını öğrenecek ve basit bir HTTP web sunucusu oluşturmak için Deno'yu kullanan uygulamalı bir gösterimi izleyeceksiniz.
Deno Nedir?
Geliştiriciler JavaScript'e aşinalık kazandıkça, yerel makinelerde programlama potansiyelini gördüler. Böylece, tarayıcı kullanmadan makinelerde JavaScript kodunun yürütülmesini sağlayan ortamlar olan sunucu tarafı çalışma zamanları oluşturdular.
Ryan Dahl, Node.js'yi bu amaçla geliştirdi ve daha sonra orijinal Node.js tasarımında karşılaştığı bazı sorunları çözmek için Deno'yu yarattı. Bazı dikkate değer kusurlar, npm gibi merkezi bir paket yöneticisine dayanması, standart bir kitaplığın olmaması ve varsayılan olarak gevşek güvenlik ayarlarını içerir.
Deno'nun başlıca avantajlarından bazıları şunlardır:
- Varsayılan olarak güvenlik — Kullanıcı, kodun ağa, dosya sistemine veya ortama erişmesine açıkça izin vermelidir.
- TypeScript ve WebAssembly için yerleşik destek — Deno'da TypeScript ve WebAssembly programlarını çalıştırmak, JavaScript programlarını çalıştırmak kadar kolaydır. Çalışma zamanı, dilleri tıpkı JavaScript'te olduğu gibi derler.
- Merkezi olmayan bir paket yöneticisi — npm veya Bun'ın paket yöneticisi gibi bir paket deposuna güvenmek yerine Deno, kodu doğrudan URL'lerden içe aktarabilir. Bu yetenek, bağımlılıkları GitHub deponuz, sunucunuz veya CDN'niz dahil olmak üzere barındırıldıkları her yerden yükleyebileceğiniz anlamına gelir. Deno ayrıca daha da kolay erişim için bir komut dosyası barındırma hizmeti sunar.
- Web standartlarına uygunluk — Deno, tarayıcılarla aynı API'leri takip etmeyi amaçlar; bu, tarayıcılar için yazılan kodun kolayca çalışma zamanına çevrilebileceği anlamına gelir.
Slack, Netlify ve Supabase gibi büyük şirketler ve büyük endüstri oyuncuları Deno'yu benimsedi, ancak web geliştiricileri arasında benimsenmesi daha az yaygın. 2022 Stack Overflow anketine göre, ankete yanıt veren profesyonel geliştiricilerin yalnızca %1,47'si Deno kullanırken, %46,31'i Node.js kullandığını bildirdi.
Deno Ne İş Yapar?
Herhangi bir JavaScript çalışma zamanı gibi, Deno da geliştiricilerin JavaScript'i sunucu tarafında çalıştırmasına olanak tanır. Sonuç olarak, çok çeşitli programlama görevlerini gerçekleştirmek için Deno'yu kullanabilirsiniz.
Deno, web tabanlı kullanıcı isteklerine yanıt veren sunucu uygulamaları geliştirmek gibi görevlerde en başarılıdır. Örneğin, çevrimiçi bir kitapçı oluşturuyorsanız, PostgreSQL veritabanından bilgi alan, kullanıcının görüntülemek istediği sayfayı oluşturan ve işlenmek üzere tarayıcıya gönderen bir uygulama oluşturmak için Deno'yu kullanabilirsiniz.
Deno'yu, yapılacak işlerinizi terminal aracılığıyla yönetmek için bir komut satırı aracı oluşturmak gibi daha düşük düzeyli programlama görevleri için de kullanabilirsiniz. Başka bir deyişle, Deno'yu Python veya Ruby gibi dilleri kullanarak elde edeceğiniz aynı hedeflere ulaşmak için kullanabilirsiniz.
Deno ve Düğüm
Deno, Node.js üzerinde bir gelişme olmayı hedefliyor ve bu vaadini birçok önemli alanda yerine getiriyor. Deno, farklı kod modülleri için daha ayrıntılı erişim yapılandırmaları sağlayarak güvenliği artırır. Ayrıca, geliştiricilerin hem tarayıcı hem de sunucu tarafında aynı kodu kullanmalarını sağlayan web standardı API uyumluluğuna odaklanır.
Sunucu tarafı JavaScript projelerinde çalışan ekipler için Deno, Node.js'ye uygun bir alternatif haline geldi. Ve benzer işlevleri, bazı geliştiricileri Deno'nun Node.js'nin yerini alabileceğine ikna etse de, bu olasılık birkaç önemli nedenden dolayı olası değildir.
Node.js, en popüler JavaScript çalışma zamanıdır ve önceden yazılmış paketlerden oluşan geniş bir ekosistemi ve büyük, aktif bir kullanıcı topluluğunu bir araya getirir. Bu paha biçilmez kaynaklar, Node.js'nin son derece çekici bir çalışma zamanı olarak kalmasına yardımcı olur.
Buna karşılık, Deno yenidir: Sürüm 1.0, Mayıs 2020'de yayınlandı, bu nedenle nispeten az sayıda geliştiricinin onunla oynamak için zamanı oldu. Yeni bir araç öğrenmek, geliştirme zaman çizelgelerini uzatır. Ek olarak, Deno'nun birçok basit projeye önemli faydalar sağlayıp sağlayamayacağı da net değil.
Ancak, finans gibi güvenliğin çok önemli olduğu bir alanda bir uygulama oluşturuyorsanız, Deno'nun güvenlik özellikleri geçiş yapmaya değer olabilir.
Deno vs Bun
Eski Stripe mühendisi Jarred Sumner, Bun'u ilk olarak Temmuz 2022'de Beta testi için piyasaya sürdü. Bun, Deno'dan daha deneysel bir çalışma zamanıdır ve Deno'nun aksine, Node.js ile kapsamlı geriye dönük uyumluluğa sahip olacak şekilde tasarlanmıştır.
Bun ayrıca, Node.js ve Deno'yu geride bırakan ışık hızında performansa sahiptir. Temel özellikler bu yetenekleri etkinleştirir:
- Daha iyi bir motor — Google'ın V8 JavaScript ve Web Assembly motoru yerine Bun, temel JavaScript motoru olarak daha hızlı ve daha verimli JavaScriptCore'u kullanır.
- Daha fazla kod kontrolü — Bun, kod yürütme üzerinde JavaScript'ten daha fazla kontrol sağlayan düşük seviyeli bir dil olan Zig ile yazılmıştır.
- İnce ayarlanmış verimlilik — Bun üzerinde çalışan ekip, kod verimliliğini sağlamak için geliştirme sırasında profil oluşturma, kıyaslama ve optimizasyona öncelik verdi.
Bun o kadar yeni ki, sorun gidermeye yardımcı olacak nispeten az topluluk desteği var. Yine de Bun, deney yapmak için eğlenceli olabilir. Özellikle performans artışına ihtiyaç duyan ekipler, Bun'u projeleri için yararlı bulabilir, ancak web geliştirme, genellikle performans dışındaki faktörlere öncelik verir.
Deno'ya Başlarken
Artık Deno ve diğer popüler JavaScript çalışma zamanlarıyla karşılaştırması hakkında biraz bilgi edindiğinize göre, nasıl çalıştığını görmenin zamanı geldi. Bu bölümde, Deno'da HTTP isteklerine "Sunucudan merhaba!" ile yanıt veren basit bir sunucu oluşturmayı öğreneceksiniz.
Deno'yu Kurmak
Resmi belgelerdeki bu kurulum talimatlarını kullanarak Deno'yu bir makineye çalıştırılabilir bir ikili dosya olarak kurabilirsiniz. Örneğin, macOS'ta Deno'yu brew install deno
komutuyla kurabilirsiniz.
Deno ile çalışmaya başlamanın başka bir yolu da onu bir npm paketi olarak kurmaktır, bunun gibi:
Projeniz için bir klasör oluşturun (belki deno_example ) ve içindeki npm init
komutunu çalıştırın. (Bir temel package.json dosyası oluşturduğu için init
tarafından önerilen tüm varsayılan seçenekleri kabul edebilirsiniz.)
Uygulamanızı başlattıktan sonra, Deno ikili paketini kurmak için npm install deno-bin
komutunu çalıştırın. Artık, uygulamanın npm start
ile başlatılmasını sağlamak için package.json dosyasını güncelleyebilirsiniz. Varsayılan package.json dosyasındaki "scripts" nesne özelliğine aşağıdaki kalın satırı ekleyin:
"scripts": { "start": "deno run --allow-net app.ts", "test": "echo \"Error: no test specified\" && exit 1" },
Bu komut dosyası eklemesi, Deno'nun app.ts modülünü ağ ayrıcalıklarıyla ( --allow-net
) çalıştırmasını sağlar. Deno ile çalışırken, bir ağa veya dosya sistemine erişime açıkça izin vermeniz gerektiğini unutmayın.
Artık bir bağlantı noktasını dinlemekten ve kullanıcı isteklerini yerine getirmekten sorumlu olan app.ts modülünü oluşturmaya hazırsınız.
App.ts Modülünü Oluşturma
Deno'da temel bir sunucu oluşturmak son derece basittir. İlk olarak, bir app.ts dosyası oluşturun ve aşağıdaki kodu yapıştırın:
import { serve } from "https://deno.land/[email protected]/http/server.ts"; serve((_req) => new Response("Hello from the server!"), { port: 8000 });
Kod, resmi Deno.land web sitesinde saklanan server.ts Deno library
serve
işlevini kullanır. Bu kod ayrıca gelen istekler için bir serve
işlevi işleyicisi sağlar. İşleyici işlevi, her isteğe "Sunucudan merhaba!" İle yanıt verir.
serve
işlevi, hizmet vermek istediğiniz bağlantı noktası numarası gibi isteğe bağlı parametreleri de alır. Buradaki kod örneği, 8000 numaralı bağlantı noktasında hizmet vermek için bu parametreleri kullanır.
Ardından, npm start
çalıştırarak sunucuyu başlatın. Bu, localhost:8000
dinleyen ve isteklere bir selamlamayla yanıt veren bir sunucu başlatmalıdır.
Sunucuyu tam gelişmiş bir API'ye genişletmek istiyorsanız, muhtemelen veritabanı bağlantısı eklemeniz gerekecektir. Deno topluluğu, MariaDB/MySQL, PostgreSQL, MongoDB ve daha fazlası gibi popüler veritabanlarını destekleyen sürücüler oluşturduğundan bunu yapmak kolaydır.
Özet
Çalışma zamanları, yaygın ve güvenilirden çok deneysel olana kadar değişir. Projeniz için doğru olanı seçmek, projenize ve çalışma sürenizin hedeflerinize ulaşmanıza nasıl yardımcı olmasını istediğinize bağlıdır.
Node.js çoğu proje için iyi çalışır. Çok çeşitli sorun giderme senaryolarında yardımcı olabilecek büyük bir ekosisteme ve büyük bir topluluğa sahiptir.
Deno, ekstra güvenlik ve daha iyi bir geliştirici deneyimi avantajına sahiptir. Aynı zamanda, deneyimli ekipler için çok uygundur, bu nedenle faydaları, alışılmadık bir çalışma zamanını öğrenmenin zaman ve işçilik maliyetlerinden daha fazladır.
Son olarak, Bun çoğu profesyonel proje için fazla deneysel olsa da, kişisel bir proje için almak veya genişletmek için benzersiz ve eğlenceli bir çalışma zamanı.
Sonuç olarak Deno, Node.js'nin faydaları ile Bun'un deneysel olanakları arasında bir denge sunar. Node.js çoğu proje için kullanışlı bir seçim olsa da, Deno web geliştirmenin gelecekte nasıl gelişeceği konusunda ön saflarda yer alabilir.
Bu arada, Kinsta'nın Uygulama Barındırma Hobi Katmanına kaydolarak Deno becerilerinizi uygulayın — şimdi kodlayın ve daha sonra ölçeklendirin.