Back to blog
Frontend

Mengenal Web Workers: Cara Membuat JavaScript Mendukung Multithreading

Halaman website-mu *freeze* (macet) saat memproses file Excel berisi 50.000 baris data? Jangan korbankan UI! Gunakan Web Workers untuk tugas berat di belakang layar.

super admin·24 Juni 2026·2 min read
Mengenal Web Workers: Cara Membuat JavaScript Mendukung Multithreading
Article Content

Saat Event Loop Pun Menyerah

Kita tahu JavaScript memiliki arsitektur Asynchronous (seperti fetch dan setTimeout) yang ditangani oleh Event Loop untuk mencegah layar macet. TAPI, fitur *Async* itu hanya berlaku untuk Tugas Jaringan atau Waktu (I/O).

Bagaimana jika masalahnya adalah Komputasi CPU Berat (Matematika)? Misalnya: Kamu membuat fitur *Upload Foto*, lalu JavaScript di Frontend harus mengkompres/mengubah ukuran foto 10MB tersebut sebelum di-upload, atau *parsing* file Excel (CSV) yang berisi 100.000 baris. Karena pekerjaan berat ini tetap berada di jalur utama (Main Thread), layar *browser* pengunjung akan Macet Total (Freeze). Tombol tidak bisa diklik dan *scroll* akan mati selama 5 detik proses!

Penyelamat UI: Web Workers API

Untuk mengatasi kebuntuan ini, Browser modern menghadirkan fitur luar biasa bernama Web Workers. Web Worker mengizinkan JavaScript untuk menyewa "Otak Pekerja Baru" (Background Thread / Multithreading).

Cara Kerjanya:

Otak Utama (Main Thread) bertugas menjaga *User Interface* (HTML/Tombol) agar tetap mulus. Saat ada tugas memproses Excel 100.000 baris, Otak Utama akan melemparkan data tersebut ke Otak Pekerja (Web Worker) yang bersembunyi di belakang layar.

Selama Otak Pekerja berkeringat memproses data berat tersebut, Otak Utama tetap santai melayani klik dari *user*. Saat Pekerja selesai, ia akan "menelepon" Otak Utama memberikan hasilnya.

Sintaks Dasar Pembuatan Pekerja

Web Worker harus dipisahkan ke dalam file .js tersendiri (Misal: pekerja.js).

// 1. Di File utama (main.js)
const worker = new Worker('pekerja.js');

// Melempar data tugas ke pekerja
worker.postMessage(100000);

// Menunggu hasil pekerja selesai
worker.onmessage = function(event) {
  console.log("Hasil dari pekerja: ", event.data);
};

// -------------------------------------------

// 2. Di File pekerja (pekerja.js)
onmessage = function(event) {
  let batas = event.data;
  let hasilBerat = 0;
  
  // Proses Looping Matematika Sangat Berat
  for (let i = 0; i < batas; i++) { hasilBerat += i; }
  
  // Kembalikan hasilnya ke file utama!
  postMessage(hasilBerat);
};

Aturan Mutlak Web Workers

Karena pekerja ini berada di ruang isolasi memori yang berbeda (agar aman dan *thread-safe*), Web Workers DILARANG KERAS menyentuh DOM (HTML) atau memanggil objek window dan document. Ia murni hanya mesin penghitung (Kalkulator) yang menerima Input Data dan mengirim Output Data.

Mau langsung pakai template?

Jelajahi template gratis dan premium di TampilKit untuk mempercepat proses development project kamu.

Browse Templates