Node.js Neden Kullanılmalı?

noktalıvirgül

Deneyimli Moderatör
17 Kas 2020
924
513
Node.js tanımı: Hızlı, ölçeklenebilir sunucular ve ağ uygulamaları oluşturmak için platformlar arası kullanılan çalışma ortamıdır. JavaScript’in tarayıcının dışında çalıştırılmasını sağlayan bir çalışma zamanı ortamıdır.
JavaScript dilini bilenler bilir, önceden sadece istemci (client) tarafında çalışıyordu. Daha sonra tarayıcıda çalıştırılan Chrome V8 Engine piyasaya sürülmesiyle birlikte sunucu (server) tarafından da JavaScript dili kullanılabilmeye başlamıştır. Bu yüzden JS dilinin sunucu tarafından kullanılmasını sağlayan Chrome V8 Engine, Node.js şeklinde isimlendirilmiştir. Yani V8 JavaScript motorunda çalışır. Bir diğer değişle Node.js, sunucu tarafında çalışan javascript’tir. JavaScript ile yazılmış olan bir programı çalıştırmak için gereklilikleri sağlayan çalışma zamanı ortamını node.js sunar. Geliştiriciler tarafından en çok sevilen ve kullanılmak istenilen teknolojiler arasında JavaScript ve Node.js bulunuyor. Aynı zamanda Nodge.js açık kaynaklı bir çalıştırma ortamıdır. G/Ç (giriş/çıkış-port-I/O) mimarisini kullandığı için verimli ve gerçek zamanlı uygulamalar için uygun hale gelir.

Node.js Hangi Dilde Tasarlandı?
Bu teknoloji, C, C++ ve JavaScript programlama dilleriyle yazılmıştır. Günümüzde C#, Python, PHP gibi fazladan bir dil bilmeden bile sadece JavaScript bilerek Node ve React aracılığıyla full-stack (Front-End+Back-And+veri tabanı) web uygulamaları geliştirilebilir. Yani node.js uygulamaları, JavaScript kullanılarak geliştirilir.

Node.js Kurulumu:
MacOS için kurulum:
Mac’te Bash kullanılarak kurulum için;


Kod:
curl
"https://nodejs.org/dist/latest/node-${VERSION:-$(wget -qO- https://nodejs.org/dist/latest/ | sed -nE 's|.*>node-(.*)\.pkg.*|\1|p')}.pkg" > "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"

Mac’te Homebrew ile kurulum;

Kod:
brew install node

Windows için kurulum: Windows Installer, direkt nodejs.org web sitesi ile indirilebilir.
Linux için kurulum: Ubuntu 18.04+ üzerinde şu komutla kullanılarak yüklenebilir.


Kod:
sudo apt update

sudo apt install nodejs

Node.js sürümünün yüklü olup olmadığının kontrolü
Terminalde şu komut çalıştırılır:


Kod:
Node –v

Ayrıca flag aracılığıyla da kontrol edilebilir:

Kod:
Node –version

Bu komuttan sonra şu çıktı görülmelidir.

V14.16.0

Node.js Çalışma Yapısı
Chrome V8, JavaScript’in yürütme motorudur, node.js bunu dahili olarak kullanır. Aynı zamanda C++ ile de yazılabildiği için node.js’nin ek kullanım özellikleri kazanmasını da sağlar. Örneğin dahili sistem işlevlerine erişim konusunda ağ oluşturma özelliği düşünülebilir.
Node.js, çok sayıda istemciyi işleyebilmek için “Tek iş parçacıklı olay döngüsü” mimarisini kullanır.

“Çok iş parçacıklı” modelde ise sunucu, çok sayıda istemcinin gönderdiği isteklerin yanıtını göndermeden önce her bir isteği işler. Eş zamanlı gelen istekler veya çağrılar için birden çok iş parçacığı kullanılır. Bu iş parçacıkları bir havuzda tanımlanır ve istemcilerden istek geldiğinde bunu işlemek için ayrı ayrı iş parçacıkları atanır. Bu durumu maddeler halinde sıralayalım:

  • Node.js, gelen istekleri işlemek için bunları iş parçacığı havuzunda tutar.
  • Her istek geldiğinde bu havuzda sıraya yerleştirilir.
  • Önce tek bir iş parçacıklı “olay döngüsü” başlar.
  • Bir istek geldiği zaman döngü o isteği kuyruktan/sıradan alır, bir engelleme giriş/çıkış (G/Ç) işlemi gerektirip gerektirmediğini kontrol eder. Eğer gerektirmiyorsa isteği işler sonra da isteğe bir yanıt gönderir.
  • İsteğin bir engelleme işlemi varsa “olay döngüsü” isteği işleyebilmek için “dahili iş parçacığı havuzu”ndan iş parçacığı atar.
  • “Olay döngüsü” engelleme isteklerini gözlemler, herhangi bir engelleme görevi işlenince bu istekleri kuyruğa/sıraya yerleştirir. Bu yerleştirme sebebi, bloke edici olmayan yapısını korumak içindir.
En belirgin özellikleri, asenkron çalışması ve non-blocking olmasıdır. Nedir bu asonkron ve non-blocking? Yani nasıl çalışırlar?
Node.js tarafına işlem için istek gönderildiğinde node.js onu hemen işleve koyar ama başka bir işlemi almak için de önceden aldığı işlemin bitmesini beklemez. İstekler geldikçe iletilir, yani bir isteğin alınırken diğer bir isteğin bitmesi engellenmiş oluyor. Hangi istek önce biterse isteğin ona göre cevabı geliyor. Buna göre bir açıklama yapacak olursak, asenkron çalışma sistemi bu şekilde çalışıyor diyebiliriz. Ayrıca işlemler birbirlerine engel olmadığı ve olumsuz şekilde etkilememesi non-blocking özelliğinin varlığıyla açıklanır.

Genel özellikleri
Node.js, birçok yapıya göre çok daha az iş parçacığı kullandığından dolayı daha az kaynak/bellek kullanır ve bu sayede daha hızlı bir çalışma süreci oluşmuş olur. Yoğun veri içeren görevlerin işlenmesi için Java gibi çok iş parçacıklı dilleri kullanmak gerekir. Gerçek zamanlı uygulamalar için de Node.js kullanımını seçmek uygundur.
Node.js özelliklerini maddeler halinde genel anlamda sıralarsak;


  • Geliştirme işlemini kolaylaştırması- Örneğin web geliştirmeye yeni başlayanlar için uygundur. Oldukça fazla öğretici içeriğe ulaşmak da bu konuda mümkündür.
  • Ölçeklenebilir olması- Node.js, tek iş parçacıklı çalışmasına rağmen çok sayıda eş zamanlı bağlantıyı yüksek verimli işleyebilir.
  • Hızlı olması- Node.js’nin daha hızlı ve verimli olmasını, engellenmeyen iş parçacığı yürütme özelliği sağlar.
  • Açık kaynaklı paketlerin olması- Oldukça çok sayıda açık kaynaklı Node.js paketi bulunur. Örneğin NPM sisteminde bir milyondan fazla paket vardır.
  • Güçlü bir back-end yapısı olması- C ve C++ ile yazılabildiği için hız ve ağ desteği imkanları kazanır.
  • Çoklu platformlara uyum sağlaması- Node.js kullanılarak SaaS web siteleri, masaüstü uygulamaları, mobil uygulamalar gibi çok tercih edilen platformlar oluşturulması konusunda imkan bulunur.
  • Sürdürülebilir olması- Birbirinden farklı olan front-end ve back-end konularında geliştiriciler için kolay ve her ikisi için de kullanılabilir halde olması, tek bir dil olarak JavaScript ile yönetilebilmesi büyük katkı sağlar.
Node.js’nin büyük getirilerinden biri de modüler yapıda olması ve bu yapıyı npm (nodejs package manager-paket yönetim sistemi) ile desteklemesidir. Npm bir depo gibidir. Bu depoda node.js projelerinde kullanılmak için barındırılan çok sayıda modül bulunur. Bu modüller, npmjs.com üzerine yüklenir. Bunu açık kaynak (open-source) geliştiricileri yüklerler.
Senkron şekilde çalışan işlemlerde bir işlem, diğer işlemleri beklediği için asenkrondan daha fazla sürer. Asenkron yapıdaki işlemlerin ise başlangıcı diğer işlemin bitişine bağlı olmadığı ve diğer işlemlerin bitişini beklemediği için çok daha kısa sürer. İşte bu asenkron yapı ile node.js büyük bir hız kazanır. Bu sayede çok sayıda kullanıcıya hızlı cevap verebildiğinden dolayı ölçeklenebilirlik durumuna daha az maliyetli bir çare sunulmuş olur.
Binlerce kişinin eş zamanlı isteğine bile hitap eden bir teknoloji geliştirilmek isteniyorsanız node.js programlama ortamından yararlanmanız daha iyi olacaktır. Linkedin, Netflix gibi büyük platformlar da hem maliyet, hem pratiklik hem hız hem çok sayıda kullanıcıya cevap verebilmek için node.js kullanıyor.

Node.js ile çalışılarak yapılabilen popüler uygulama çeşitleri:


  • Nesnelerin interneti (IOT): Bu uygulamalar, çok sayıda veri parçacıkları gönderdikleri için çoğunlukla çok sayıda sensör de içerirler. Node.js de bu eşzamanlı çok sayıdaki isteği hızlıca işleyebildiği için bu uygulamaların tasarımı yapılırken tercih edilir.
  • Gerçek zamanlı sohbet uygulamaları: Çoğunlukla sohbet robotlarının oluşturulmasında Node.js kullanılır. Ayrıca çok sayıda kişinin sohbet edebildiği, anında iletim sağlayan özellikteki sohbet uygulamalarının kullanımını kolaylaştırır. Bunların sebebi, node.js’nin tek iş parçacıklı eşzamansız yapıda, gerçek zamanlı iletişimi işlemek için uygun ve kolaylıkla ölçeklenebilir olmasındandır.
  • Gerçek zamanlı veri akışı: Bazı büyük platformlar gerçek zamanlı veri akışı (streaming) için node.js kullanırlar. Node.js’nin hafif ve hızlı olması, node.js’nin native stream (yerel akış) API’sını sağlaması sebebiyle node.js kullanımı tercih edilir. Bu sayede kullanıcıların isteklerinin birbirlerine yönlendirilmesi, verilerin doğrudan hedefe aktarılması sağlanır.
  • Tek Sayfa Uygulamaları (SPA): Bu uygulamalarda tüm uygulama tek bir sayfaya yüklenmiştir. Çoğunlukla belirli bileşenler için birkaç istek için kullanılır. “Node.js olay döngüsü” istekleri engellemeden işlediği için burada tercih edilir.
  • REST API tabanlı uygulamalar: REST API’ler mikro hizmet içerisindeki bileşenlerin bağlanması ve bunlarla iletişim kurulması için kullanılan uygulamalardır. Bir sunucu, node.js kullanarak REST API’ler sayesinde front-end ile iletişim kurabilir.
Bu bilgilerden yola çıkarak şu sonuca varabilir ve konuyu özetleyebiliriz:
Node.js, çok sayıda bile olan eş zamanlı istekleri destekleyen uygulamaları oluşturmakta tercih edilen ortam sunar. Hem gerçek zamanlı hem de veri akışı uygulamaları için uygun bir seçim olması, tek iş parçacıklı engellemesiz giriş/çıkış özelliklerinin olmasının sonucudur. Ayrıca NPM (Nodejs Package Manager-Paket Yönetim Sistemi) ile açık kaynak kodlu olarak ulaşılabilen projeler ile tasarımlarda daha hızlı gelişimler sağlanabilir.
 
Son düzenleme:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.