Node.js® Hakkında

Asenkron olaya dayalı bir JavaScript çalıştırma ortamı olarak, Node.js, ölçeklenebilir ağ uygulamaları oluşturmak için tasarlanmıştır. Aşağıdaki "merhaba dünya" örneğinde, birçok bağlantı aynı anda işlenebilir. Her bağlantıda geri çağrı tetiklenir, ancak yapılacak iş yoksa, Node.js uyur.

const { createServer } = require('node:http');

const hostname = '127.0.0.1';
const port = 3000;

const server = createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

Bu, bugünün daha yaygın olan eş zamanlılık modeline karşı bir durumdur, bu modelde işletim sistemi iş parçacıkları kullanılır. İş parçacığı tabanlı ağ iletişimi nispeten verimsizdir ve çok zor kullanılır. Ayrıca, Node.js kullanıcıları, kilitlenme endişelerinden bağımsızdır, çünkü kilitler yoktur. Node.js'deki neredeyse hiçbir işlev doğrudan G/Ç yapmaz, bu nedenle işlem, Node.js standart kitaplığının senkron yöntemleri kullanılarak G/Ç gerçekleştirildiğinde dışında asla bloke olmaz. Hiçbir şey bloke olmadığı için, ölçeklenebilir sistemlerin Node.js'te geliştirilmesi çok mantıklıdır.

Eğer burada kullanılan bazı terimler sana yabancı geliyorsa, Engelleyici (Blocking) ve Engelleyici Olmayan (Non-Blocking) kavramlarını detaylıca anlatan bir makaleye göz atabilirsiniz.


Node.js, tasarım olarak Ruby’nin Event Machine ve Python’un Twisted sistemlerine benzer ve bu sistemlerden etkilenmiştir. Ancak Node.js, olay (event) modelini biraz daha ileriye taşır. Olay döngüsünü (event loop) bir kütüphane yerine çalışma zamanı (runtime) yapısı olarak sunar. Diğer sistemlerde ise olay döngüsünü başlatmak için mutlaka engelleyici (blocking) bir çağrı yapılır. Genellikle bir betiğin (script) başında geri çağırma fonksiyonları (callback) tanımlanır, sonunda ise EventMachine::run() gibi engelleyici bir çağrı ile sunucu başlatılır. Node.js’te ise böyle bir olay döngüsünü başlatan çağrı yoktur. Node.js, betiği çalıştırdıktan sonra doğrudan olay döngüsüne girer. Yürütülecek başka geri çağırma fonksiyonu kalmadığında ise olay döngüsünden çıkar. Bu davranış, tarayıcıdaki JavaScript’e benzer; olay döngüsü kullanıcıdan gizlenmiştir.

HTTP, Node.js'de birinci sınıf bir vatandaştır ve akış ve düşük gecikme düşünülerek tasarlanmıştır. Bu, Node.js'in bir web kitaplığının veya çerçevesinin temeli için uygun olmasını sağlar.

Node.js’in iş parçacıkları (thread) olmadan tasarlanmış olması, bulunduğunuz ortamda birden fazla çekirdeğin avantajlarından yararlanamayacağınız anlamına gelmez. child_process.fork() API'sini kullanarak alt işlemler (child process) oluşturabilir ve bu işlemlerle kolayca iletişim kurabilirsiniz. Aynı yapı üzerine inşa edilmiş olan cluster modülü ise, işlemler arasında socket paylaşımı yaparak çekirdekler arasında yük dengelemesi (load balancing) sağlamanıza imkân tanır.

Resmi Node.js Kaynakları

Node.js ile çalışırken özgünlük ve güvenliği sağlamak için her zaman resmi kaynakları kullanın. Resmi olmayan kaynaklardan gelen e-postalara, ikili dosyalara veya indirmelere güvenmeyin.

Resmi Node.js Alan Adları

Node.js ikili dosyalarını indirmek ve resmi dokümantasyona erişmek için yalnızca bu alan adlarını kullanın:

Resmi npm Paketleri

Node.js ekibi aşağıdaki resmi npm paket kapsamlarını yönetmektedir:

Ayrıca, Node.js ekibi nodejs-foundation npm hesabı üzerinden yayınlanan paketleri yönetmektedir. Ancak, undici gibi diğer Node.js ile ilgili paketler de projeyle yakından bağlantılı katkıda bulunanlar tarafından yönetiliyor olabilir.

Node.js ekibinden gelen paketleri kullanmak, resmi olarak desteklenen Node.js bileşenleriyle çalıştığınızın garantisidir.

Resmi GitHub Organizasyonları

Node.js ve ilgili projeler, aşağıdaki resmi GitHub organizasyonları altında yönetilmektedir:

Resmi İletişim Kanalları

Node.js ve OpenJS Vakfı, çeşitli resmi ve topluluk destekli kanallar aracılığıyla iletişim kurar. Katılım yollarıyla ilgili detaylara Katılın sayfasından ulaşabilirsiniz.

Web Sitesi Sorunları & Kesintilerini Bildirme

Node.js web sitesinde sorunla karşılaşırsanız, bunları Node.js web sitesi deposunda bildirin.
Kesintilerle ilgili anlık güncellemeler için Node.js Durum Sayfasını ziyaret edin.