garen.yöndem launching ...3 ...2 ...1

NodeJS Nedir?

6. Ekim 2017 11:00by Garen Yöndem

Javascript dünyasının büyümesine son yıllarda en fazla katkısı olan şey nedir diye soracak olsaydık, hepimizin cevabı şüphesiz NodeJS olurdu. 2009 Yılında ilk versiyonu çıkan NodeJS ile Javascript sadece browser’larda kullanılan bir dil olmaktan kurtularak server-side kullanım alanı da kazandı.


NodeJS Nedir - garen.yondem.com


Peki nedir bu NodeJS? En yaygın tanımıyla, server-side kullanım için hazırlanmış single threaded Javascript runtime. Fakat bu tanımlamada eksikler var ve genellikle yanlış anlaşılmaya neden oluyor. NodeJS CPU kullanımı gerektiren işlemlerde tasarımından dolayı sadece tek thread kullanabiliyor. Yani yoğun CPU işlemleri yapmayı düşünenler için NodeJS doğru tercih değil. Ancak, database’den data okumak gibi I/O işlemlerinde her işlem için yeni bir thread açabiliyor. Bu özelliği de NodeJS’i günümüzde web/mobil uygulamalar için back-end olarak kullanılabilecek ideal seçenek yapıyor.


NodeJS Nedir - garen.yondem.com


NodeJS’e doğru parçalar bir araya getirilerek oluşturulmuş runtime paketi de diyebiliriz. Bu parçalar Chrome V8, libuv ve OpenSSL gibi açık kaynak kodlu library’ler. Gelin bu bileşenlere yakından bakalım.


Chrome V8, ilk olarak 2008’de Google Chrome browser’ında gördüğümüz (artık her yerde karşılaşabileceğimiz) Javascript compiler. Kodu interprete etmek yerinde JIT (Just-In-Time) compiler ile doğrudan machinde code’a çevirebiliyor. C++ ile yazılmış olması da pek çok farklı uygulamaya entegre edilebilir hale getirdi ve piyasadaki konumunu güçlendirdi. MongoDB, ChouchBase, Opera ve Electron bu uygulamalardan birkaçı.


Javascript kodunu parse etmek dışındaki çoğu aksiyon libuv ile gerçekleşiyor. Bunlara event loop ve I/O işlemleri de dahil. İlk versiyonlarında NodeJS çekirdek ekibi tarafından libeio (event loop) ve libev (thread pool) library’leri için wrapper olarak yazıldı. Ancak libev’in performans sorunlarından dolayı, Argon(4.x) versiyonundan itibaren libuv bu bileşenlerin yerini almış durumda.


NodeJS Nedir - garen.yondem.com


Konuyu daha fazla dağıtmadan yukarıdaki mimariye bakarak toparlayalım. NodeJS’e gelen istekler V8 tarafından parse edildikten sonra event queue’ya giriyor. Ardından, event loop CPU yoğunluğuna göre sırayla event’leri çalıştırmaya başlıyor. Eğer event’ler I/O gerektiren işlemler ise, event loop bunlar için ayrı worker thread’ler açtıktan sonra event queue’dan yeni event’ler almaya devam ediyor. Worker thread’de işi biten event ise callback’ini çağırarak tekrar event queue’ya giriyor ve bir sonraki cycle’ı beklemeye başlıyor. Olay bu kadar basit aslında :)


Hello World

Callback, NodeJS’in ayrılmaz parçası. Network veya database gibi harici kaynaklardan cevap beklediğimizde sonucu callback function’lar kullanarak yakalıyoruz. Örnek olarak diskten dosya okuyalım.


Okuyacağımız dosya JS script’iyle aynı klasörde. NodeJS’de dosya veya klasörlerle ilgili işler yapacağımızda fs module’ünü kullanabiliriz. Bu module’ün readFile ve writeFile adında iki popüler function’ı var. Her iki function da parametre olarak callback function alabiliyor. Okuma veya yazma işlemi worker thread’de tamamlandığında callback function’ı çağırarak sonuçları dönüyorlar. Bu sırada event loop boşta beklediği için farklı function’lar çağırmaya devam edebilirdik. Sıradaki işlem için async çalışan function’ın sonucunu beklememiz gerektiğinde ise işimizi callback function’da yapmalıyız.


Şimdi kodu çalıştırıp sonucunu kontrol edelim. NodeJS’i başlatmak için diğer script dillerinde olduğu gibi script’imizin bulunduğu dosyayı executable’a argument geçmeliyiz. Bunun için Visual Studio Code’un integrated terminal’ini kullanabiliriz. Integrated Terminal’e “View” menüsünden ulaşabilirsiniz.


NodeJS Nedir - garen.yondem.com


Script dosyasını yukarıdaki şekilde çalıştırdığımızda dosyanın içeriğini terminal’de görebiliriz.


NodeJS Nedir - garen.yondem.com


Sıradaki yazıda NodeJS için development ortamını nasıl kurabileceğimize bakacağız. Görüşmek üzere!


blog comments powered by Disqus