[Lv3] Web Worker dalam Praktik: Komputasi Latar Belakang Tanpa Memblokir UI
Web Worker memindahkan logika berat CPU dari main thread sehingga UI tetap responsif.
1. Mengapa Web Worker?
JavaScript di main thread bersifat single-threaded untuk tugas UI. Komputasi berat dapat membekukan interaksi.
Kandidat umum:
- Parsing dan transformasi JSON besar
- Agregasi/statistik pada array besar
- Kompresi, enkripsi, atau pemrosesan gambar
2. Penggunaan dasar
Main thread
const worker = new Worker(new URL('./report.worker.ts', import.meta.url), { type: 'module' });
worker.postMessage({ type: 'AGGREGATE', payload: data });
worker.onmessage = (event) => {
renderChart(event.data);
};
Worker thread
self.onmessage = (event) => {
const { type, payload } = event.data;
if (type === 'AGGREGATE') {
const result = compute(payload);
self.postMessage(result);
}
};
3. Pola pengiriman pesan
- Request/response dengan
requestId - Event progress untuk tugas panjang
- Channel error dengan payload error terstruktur
self.postMessage({ requestId, progress: 60 });