Apa itu Node.js (Node)?
Node.js (Node) adalah lingkungan runtime Open Source dan lintas platform untuk mengeksekusi kode JavaScript. Node digunakan secara luas untuk pemrograman sisi server, memungkinkan pengembang menggunakan JavaScript untuk kode client-side dan server-side tanpa perlu mempelajari bahasa tambahan. Node terkadang disebut sebagai bahasa pemrograman atau kerangka kerja pengembangan perangkat lunak, tetapi sebenarnya bukan keduanya; Node adalah runtime JavaScript.
Node menggabungkan mesin JavaScript V8, yang sama digunakan dalam Google Chrome dan browser lainnya. Mesin ini ditulis dalam C++ dan dapat berjalan di macOS, Linux, Windows, serta sistem lainnya. Mesin ini menganalisis dan mengeksekusi kode JavaScript secara independen dari lingkungan browser, baik tertanam dalam aplikasi C++ maupun sebagai program mandiri. Mesin V8 mengompilasi JavaScript secara internal menggunakan proses JIT (Just-in-Time) untuk mempercepat eksekusi.
Berikut adalah contoh file JavaScript sederhana (server_tst.js) yang ditulis untuk lingkungan Node. Skrip ini memulai dengan memuat modul Hypertext Transfer Protocol (HTTP) dari Node.js. Modul ini mencakup berbagai kelas dan metode untuk mengimplementasikan server HTTP.

Setelah Node.js diinstal pada komputer, file ini dapat dijalankan dengan perintah: node server_tst.js
. Kode JavaScript ini menginstruksikan Node untuk melakukan dua operasi dasar:
- Menampilkan pesan di browser pada mesin lokal ketika mengakses http://localhost:2000. Pesannya adalah “Ini adalah uji coba Node.js di komputer lokal.”
- Mengembalikan pesan ke konsol saat perintah dijalankan: “Server Node.js berjalan di http://127.0.0.1:2000/.”
Informasi lebih lanjut tentang komponen skrip ini dan modul HTTP secara umum dapat ditemukan dalam dokumentasi referensi API resmi Node.js.
Bagaimana Cara Kerja Node.js?
Aplikasi Node berjalan dalam satu proses. Node tidak membuat thread baru untuk setiap permintaan seperti yang biasa terjadi pada program server-side tradisional. Dengan demikian, server Node dapat menangani ribuan koneksi bersamaan tanpa harus berhadapan dengan masalah konkurensi thread atau beban multithreading.
Node.js bersifat event-driven dan berjalan secara asinkron. Kode yang ditulis untuk lingkungan Node tidak mengikuti model tradisional menerima, memproses, mengirim, menunggu, dan menerima kembali. Sebagai gantinya, Node mengimplementasikan event loop yang memproses permintaan masuk secara berurutan dalam antrean event tanpa menunggu respons.
Pendekatan ini menawarkan keunggulan besar dibandingkan model tradisional yang menjalankan operasi lebih besar dan kompleks dengan beberapa thread secara bersamaan, masing-masing menunggu respons sebelum melanjutkan.
Menurut penciptanya, Ryan Dahl, pendekatan Node.js menghindari pemblokiran operasi input/output (I/O). Fungsi Node tidak melakukan I/O secara langsung, mengurangi potensi pemblokiran. Pemblokiran hanya terjadi jika metode sinkron dalam pustaka standar Node digunakan, tetapi ini adalah pengecualian, bukan aturan, membuat Node sangat cocok untuk aplikasi real-time dengan beban kerja konkuren yang tinggi.
Node juga dilengkapi dengan antarmuka baris perintah (CLI) npm. CLI ini adalah bagian dari sistem manajemen paket npm, yang mencakup repositori besar perangkat lunak JavaScript beserta informasi metanya. CLI memungkinkan pengguna berinteraksi dengan paket npm langsung dari konsol. Repositori npm diklaim sebagai repositori kode bahasa tunggal terbesar di dunia.
Seperti JavaScript, Node dianggap relatif mudah dipelajari. Node memiliki komunitas pengguna yang besar dan aktif. Selain itu, karena bersifat asinkron, event-driven, dan non-blocking, Node dapat menangani konkurensi real-time yang umum dalam banyak aplikasi web dan layanan daring saat ini. Node cocok untuk aplikasi real-time seperti chat, layanan streaming, Internet of Things (IoT), atau Single Page Application (SPA).
Namun, Node tidak cocok untuk semua jenis beban kerja. Misalnya, karena sifatnya yang single-threaded, Node mungkin tidak efektif dalam menjalankan aplikasi web yang membutuhkan komputasi server-side intensif. Beban komputasi yang tinggi bisa menyebabkan pemblokiran permintaan masuk dan menurunkan kinerja secara keseluruhan.
Namun, jika Node cocok untuk kebutuhan Anda dalam aspek lain dan beban komputasi tidak terlalu berat, beban tersebut dapat dijalankan sebagai proses latar belakang dalam bahasa lain. Node juga dapat digunakan sebagai bagian dari arsitektur mikroservis yang membagi aplikasi menjadi bagian-bagian yang lebih kecil.