JavaScript menjalankan kod dalam satu jujukan, yang dipanggil single-threaded. Reka bentuk ini berfungsi dengan baik untuk tugas mudah dalam penyemak imbas web, tetapi ia boleh menyebabkan masalah apabila utas utama disekat oleh tugas berat, seperti pengiraan kompleks atau operasi latar belakang. Tugasan ini boleh menjadikan halaman perlahan dan tidak bertindak balas. Untuk menyelesaikan masalah ini, JavaScript menawarkan Pekerja Web, yang membolehkan anda mengalihkan tugas berat ke urutan yang berasingan, memastikan urutan utama bebas untuk interaksi pengguna yang lancar.
Pekerja Web ialah ciri API Web yang membenarkan kod JavaScript dijalankan di latar belakang pada urutan yang berasingan. Ini membolehkan gelagat seperti berbilang benang, meningkatkan prestasi dengan memunggah tugas intensif sumber daripada urutan utama.
Pekerja Web beroperasi dalam konteks pelaksanaan yang berbeza, bermakna mereka tidak mempunyai akses kepada DOM, tetingkap atau objek dokumen. Walau bagaimanapun, mereka boleh berkomunikasi dengan utas utama melalui mesej.
Berikut ialah panduan langkah demi langkah untuk menggunakan Pekerja Web:
// worker.js self.onmessage = function(event) { const data = event.data; const result = performHeavyComputation(data); self.postMessage(result); }; function performHeavyComputation(input) { // Simulate a CPU-intensive task let total = 0; for (let i = 0; i < 1e7; i++) { total += i * input; } return total; }
// main.js const worker = new Worker('worker.js'); // Send data to the worker worker.postMessage(42); // Receive data from the worker worker.onmessage = function(event) { console.log('Result from worker:', event.data); }; // Handle errors worker.onerror = function(error) { console.error('Worker error:', error.message); };
Apabila tugas pekerja selesai, atau jika tugas itu tidak diperlukan lagi, tamatkannya untuk membebaskan sumber:
worker.terminate();
Mengisih tatasusunan yang besar boleh menyekat utas utama, menyebabkan UI menjadi beku. Mari gunakan Pekerja Web untuk mengendalikan tugas ini:
Fail Pekerja (sortWorker.js):
self.onmessage = function(event) { const sortedArray = event.data.sort((a, b) => a - b); self.postMessage(sortedArray); };
Skrip Utama:
const largeArray = Array.from({ length: 1e6 }, () => Math.random()); const sortWorker = new Worker('sortWorker.js'); sortWorker.postMessage(largeArray); sortWorker.onmessage = function(event) { console.log('Sorted array:', event.data); }; sortWorker.onerror = function(error) { console.error('Error in sorting worker:', error.message); };
Dengan faedah, terdapat beberapa kelemahan dan pengehadan Pekerja Web.
Pekerja Web membenarkan anda menjalankan tugas berat di latar belakang, menjadikan JavaScript berasa seperti mempunyai berbilang urutan. Dengan mempelajari cara menggunakannya dengan berkesan, anda boleh membangunkan aplikasi web yang lebih pantas & responsif.
Untuk senario yang memerlukan keupayaan benang yang lebih maju, pertimbangkan pilihan seperti Shared Workers atau Worklets, yang memanjangkan model Web Worker. Dengan penggunaan Web Workers yang betul, anda boleh meningkatkan prestasi dan responsif aplikasi JavaScript anda dengan ketara.
Atas ialah kandungan terperinci Pekerja Web untuk Multithreading dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!