Apa Itu Event Loop?
Event loop adalah mekanisme yang mengatur bagaimana Node.js mengeksekusi kode, memproses event, menjalankan callback, dan menangani operasi asynchronous. Meskipun Node.js hanya memiliki satu thread utama, event loop membuat Node.js seolah-olah dapat menangani banyak proses secara paralel.
Dengan event loop, Node.js tidak menunggu proses I/O selesai. Ia meneruskan tugas ke sistem (C++ APIs, libuv) dan melanjutkan hal lain sembari menunggu respons.
Mengapa Event Loop Penting?
- Memungkinkan Node.js menangani ribuan koneksi secara efisien.
- Membuat proses I/O seperti database, file system, atau network tidak menghambat aplikasi.
- Mendukung arsitektur non-blocking yang disukai aplikasi modern.
Bagaimana Event Loop Bekerja?
Cara kerja event loop dapat disederhanakan dalam beberapa fase:
- Timers
Menjalankan callback darisetTimeout()dansetInterval()yang waktunya telah tercapai. - I/O Callbacks
Menangani callback dari operasi I/O non-blocking seperti network atau file system. - Idle & Prepare
Fase internal yang jarang berinteraksi dengan kode developer. - Poll
Fase utama — Node.js menunggu I/O baru atau menjalankan callback yang siap dijalankan. - Check
Menjalankan callback darisetImmediate(). - Close Callbacks
Menjalankan callback untuk event close sepertisocket.on('close').
Visualisasi Singkat Event Loop
Bayangkan event loop seperti antrian tugas (queue). Setiap callback yang siap dijalankan akan masuk ke antrian, dan event loop mengeksekusinya satu per satu dengan cepat.
┌──────────────────────────┐
│ JavaScript │ (Kode utama berjalan di single thread)
└──────────┬───────────────┘
│
Event Loop
│
┌─────┬────┴───────┬─────┬──────┬────────┐
│Timers│ I/O Callbacks │ Poll │ Check │ Close│ ...
└──────┴──────────────┴──────┴────────────┘
Di luar event loop, Node.js menggunakan libuv yang bertugas mengelola thread pool untuk pekerjaan berat seperti kompresi, hashing, atau file I/O kompleks.
Contoh Sederhana Perilaku Event Loop
console.log("A");
setTimeout(() => {
console.log("B");
}, 0);
console.log("C");
Outputnya adalah:
A
C
B
Mengapa B belakangan? Karena setTimeout() diproses di fase Timers, dan callback-nya harus menunggu event loop kembali ke fase itu, walaupun delay-nya 0.
Perbedaan setTimeout() dan setImmediate()
Walaupun keduanya terlihat sama, event loop memprosesnya di fase yang berbeda:
- setTimeout() → Fase Timers
- setImmediate() → Fase Check
Terkadang setImmediate() dijalankan lebih cepat daripada setTimeout(..., 0) tergantung kapan event loop memasuki fase tertentu.
Kesalahan Umum Memahami Event Loop
- “Node.js multithread” → Salah. JavaScript-nya single thread, tapi ada thread pool untuk tugas berat.
- “Non-blocking berarti paralel” → Tidak selalu. Event loop membuat proses bergilir, bukan paralel penuh.
- “setTimeout(0) langsung dieksekusi” → Sebenarnya ia menunggu fase Timers pada event loop.
Kenapa Developer Perlu Memahami Event Loop?
Dengan memahami event loop, kamu bisa:
- Menghindari bottleneck performa.
- Menulis kode async yang lebih efisien.
- Mengerti kenapa callback bisa dieksekusi terlambat.
- Mengatasi masalah race condition atau blocking code.
Kesimpulan
Event loop adalah inti dari performa Node.js. Mekanisme ini memungkinkan Node.js untuk menangani ribuan permintaan dengan cepat tanpa harus menggunakan banyak thread. Dengan pemahaman yang baik mengenai fase-fase event loop, developer dapat mengoptimalkan aplikasi dan menulis kode asynchronous yang lebih efisien.
“Node.js cepat bukan karena multithread, tapi karena event loop yang cerdas.”
Danendra N R
Penulis di Zelixify Blog
Ingin Aplikasi dengan UI/UX Menakjubkan?
Tim desainer dan developer kami siap mewujudkan aplikasi impian Anda dengan pengalaman pengguna terbaik.
Konsultasi Gratis via WhatsApp