Web Workers
Web Workers memungkinkan kita menjalankan JavaScript di thread terpisah dari main thread. Ini mencegah heavy computation dari memblokir UI.
Kapan Menggunakan
- Parsing/processing data besar (JSON, CSV)
- Image processing (resize, filter)
- Kalkulasi kompleks (sorting, searching)
- Encryption/hashing
Membuat Worker
// main.js
const worker = new Worker("heavy-task.js");
// Kirim data ke worker
worker.postMessage({ data: largeArray });
// Terima hasil dari worker
worker.onmessage = (event) => {
console.log("Result:", event.data);
};
// heavy-task.js (worker)
self.onmessage = (event) => {
const result = processData(event.data);
self.postMessage(result);
};
Limitasi Worker
- Tidak bisa akses DOM — Tidak ada
document,window - Komunikasi via message — Data di-copy (structured clone), bukan shared
- Terpisah dari main thread — Error di worker tidak crash halaman
SharedArrayBuffer
Untuk shared memory (zero-copy transfer), gunakan SharedArrayBuffer + Atomics. Ini advanced dan memerlukan Cross-Origin-Isolation headers.