Nonblocking IO uygulama içerisinde network requestleri, dosya işlemleri, database işlemleri gibi uzun sürecek işlemler sırasında js içerisinde zaten tek thread kullanıldığı için bu işlemleri event driven olarak tanımlayıp (mesela http request tanımlandığında bir event fırlat ve bu kod bloğu çalışsın gibi) kod bloğumuzun bloklanmadan çalışma prensibine dayanır.
Bu kullanım geleneksel back-end sistemlerine göre oldukça büyük performans artışı sağlar. Şöyle ki: farklı backend uygulama mimarilerinde kullanıcıdan gelen istek database ile işlem yapmak gerektiğinde kodumuz database’e istek attıktan sonra cevabı beklemeye koyulur ve bu bekleme esnasında aslında sistem kaynağı boşuna harcanır. Bu bekleme milisaniyeler olsa da hergün binlerce requesting geldiği bir sistemde milyonlarca database işlemi yapılır. Ve bu, doğal olarak çok büyük bir sistem kaynağının boş yere harcanması demektir.
NodeJS ise database’e gitmesi gereken durumda bir callback fonksiyonu oluşturarak database cevabı gelmesi durumunda bir event, emit edilerek callback metodunun işlemesi sağlanıyor. Bu bekleme esnasında Javascript Engine event loop’unu çalıştırmaya devam ederek başka işlemler yapmaya devam ediyor. Bu durumda sistem kaynağı bekleme esnasında boşuna harcanmaktan kurtulup diğer işlemlerde kullanılıyor.
<html> <body> <script type="text/javascript"> console.log("kodlab request start"); $.get("http://kodlab.com",function(data) { console.log("kodlab request succeed"); }) console.log("tazedirekt requst start"); $.get("http://tazedirekt.com",function(data) { console.log("tazedirekt request succeed"); }) console.log("next line"); /*Yukarıda jquery kullanılarak 2 farklı URL'e istek atılmaktadır. Ayrıca aralarda console.log metoduyla ekrana çıktılar verilecek, aynı şekilde GET requestinin cevabı çıktı olarak yazılacaktır. ÇIKTI ŞU ŞEKİLDEDİR: Kodlab request start Tazedirekt request start next line kodlab request succeed tazedirekt request succeed Yorumladığımızda, kod bloğu yukarıdan aşağıya doğru çalışmakta ve get requestleri atılmaktadır. Ancak atılma anından sonra js engine cevabın gelmesini bir handler bağlayarak sonraki satırdan devam etmekte cevap döndüğünde ise event loop sırasına alarak bu event handlerları çalıştırmaktadır. */ </script> </body> </html>