
JavaScript istemci tarafında çalışan bir programlama diliyken Google’ın Chrome V8 i piyasaya sürmesiyle birlikte sunucu tarafında da kullanılabileceği fikri ortaya çıktı ve Node.Js hayatımıza giriş yapmış oldu. JavaScript temelli olduğu için dinamik ve hızlıdır. Bu yüzden Ali Express, Netflix, Uber, Linkedln ve NASA gibi çok büyük şirketlerin kullandığı bir back-end programlama dilidir.
V8 motoru için özellikle geliştirilen Node.Js açık kaynağa sahip bir JS runtime environmenttir. Bundan dolayı hızlı bir şekilde ölçeklendirilebiliyor ve gerçek zamanlı uygulamalarda verimli bir şekilde çalışabiliyor. Node.Js platformunda single threaded event loop sistemini kullanır. Multi threaded mimarisinin çok yavaş bir event loop olması göze çarpmaktadır. Bu da çoklu thread işlemini zorlaştırır. Yani aynı anda birden fazla isteğe cevap vermesi çok zor olur. Single thread kullanılması bu iş için çok daha uygundur, bunun için Node.Js kullanıcılara Libuv kütüphanesini sunmuştur. Her bir isteğin RAM üzerinde ayrı bir thread oluşturan web-serving tekniği yerine tek bir thread kullanır. Bu sayede aynı anda yüzlerce bağlantının yönetilmesi sağlanır. Bu sistemde npm ile kullanıcıya paket yönetimi desteği de sunulmaktadır. Node.Js için geliştirilmiş tek bir ihtiyaca yönelik milyonlarca kütüphane bulunmaktadır. Bu kütüphaneler tamamen ücretsiz ve her geçen gün daha da büyümektedir. Bu da Node.Js kullanıcılarını daha da güçlü kılmaktadır. Geliştiriciler paketleri ödünç almak ya da paylaşmak için npm kullanırlar. Npm modülleri ile performansı artırmak, zamandan tasarruf sağlamak ve büyük bir test ortamı oluşturmak mümkün hale gelmiştir.
Bu soruya internette klasikleşen şu cevapla vermek uygun olacaktır. Bir restorana gittiğinizi ve menüden seçim yaparak sipariş verdiğinizi düşünün. Restoranda, siz garsona siparişinizi verirsiniz. Garson da aşçıya siparişi bildirerek sipariş hazırlanmaya başlanır. Tabi siparişinizi verdikten sonra restoranda oturan tek kişinin siz olamadığınızı da düşünmeniz gerekir. Eğer garson, sizin siparişiniz hazırlanana kadar diğer müşterilerin siparişlerini almazsa, söz konusu müşteriler doğal olarak çok fazla zaman kaybeder. Bu nedenle sizin siparişiniz aşçıya bildirildikten sonra garson diğer müşterilerden sipariş almaya ve aşçıya eş zamanlı şekilde siparişleri bildirmeye devam eder. Bu sayede bir kişinin isteği, diğerlerinin işini engellememiş olur.
Bu örnekten de anlaşılabileceği gibi sisteme bir talep iletildiğinde Node.Js bu talebi derhal işleme koyar. Sisteme bu arada onlarca talep gelmektedir. Node.Js, ilk talebin sonucunu beklemeden sonraki talepleri almaya ve onları da işleme koymaya devam eder. Bu sayede hiçbir istek, diğerini engellemez. Hangi talep önce tamamlanırsa onun cevabı sisteme düşer. Sistemin bu döngüsü a-senkron çalışma mantığı olarak adlandırılır. Bir işlem diğer bir işlemi engellemediği için non-blocking olmaktadır. Senkron işlemlerde bir talep sonuçlanmadan diğer talebe cevap verilmez. Bu da zaman kaybı demektir. İşte Node.js, bu zaman kaybının önüne geçilmesini sağladığı için yaygın olarak tercih edilen bir sistemdir. İşte bu şekilde taleplere çok hızlı cevap verdiği ve aynı anda çok fazla kullanıcıya hizmet sunabildiği için popüler hale gelmiştir.