Jawaban:
Ada perbedaan besar dalam tujuan mereka:
Pekerja Web
Pekerja Web menyediakan cara sederhana bagi konten web untuk menjalankan skrip di utas latar belakang. Rangkaian pekerja dapat melakukan tugas tanpa mengganggu antarmuka pengguna. Selain itu, mereka dapat melakukan I / O menggunakan XMLHttpRequest (meskipun atribut responseXML dan saluran selalu null). Setelah dibuat, seorang pekerja dapat mengirim pesan ke kode JavaScript yang membuatnya dengan memposting pesan ke event handler yang ditentukan oleh kode itu (dan sebaliknya.)
Sumber - Menggunakan Pekerja Web
Pekerja Layanan
Pekerja layanan pada dasarnya bertindak sebagai server proxy yang berada di antara aplikasi web, dan browser serta jaringan (jika tersedia). Mereka dimaksudkan untuk (antara lain) memungkinkan pembuatan pengalaman offline yang efektif, mencegat permintaan jaringan, dan mengambil tindakan yang sesuai berdasarkan ketersediaan jaringan dan aset yang diperbarui berada di server. Mereka juga akan mengizinkan akses ke pemberitahuan push dan API sinkronisasi latar belakang.
Jadi Web Worker berguna untuk menjalankan skrip mahal tanpa menyebabkan antarmuka pengguna terhenti, sedangkan Service Worker berguna untuk mengubah respons dari permintaan jaringan (misalnya, saat membuat aplikasi offline).
Jawaban Buksy benar tetapi menurut saya tidak menjawab pertanyaan awal, yaitu: "Apa yang bisa dilakukan service worker yang tidak bisa dilakukan oleh web worker? Atau sebaliknya?"
Ada perbedaan mendasar dalam siklus hidupnya dan jumlah instans per asal yang dapat Anda miliki. Pendeknya:
| Web Workers | Service Workers |
|--------------|--------------|------------------|
| Instances | Many per tab | One for all tabs |
| Lifespan | Same as tab | Independent |
| Intended use | Parallelism | Offline support |
Jawaban Buksy pada dasarnya adalah baris terakhir dari tabel tersebut. Kredit: Saya mengambil tabel ini dari Demystifying Web Workers and Service Workers oleh Nolan Lawson, mulai dari slide 35 .
Secara khusus, berikut adalah cara Anda menelurkan dan menghentikan pekerja web:
sedangkan pekerja layanan memiliki siklus hidup mereka sendiri, yang diakui sebagai "bagian paling rumit" mereka:
Jadi gaya hidup adalah salah satu perbedaan mendasar antara keduanya (konsekuensi dari tujuan penggunaannya).
Dulu ada perbedaan besar dalam dukungan browser : Pekerja layanan tidak tersedia sama sekali di Safari untuk iOS hingga 11,3 (29 Maret 2018), lihat Bisakah saya menggunakan pekerja layanan? Sebaliknya, pekerja web memiliki dukungan browser yang jauh lebih baik di tahun 2012: Dapatkah saya menggunakan pekerja web?
Jika Anda harus mendukung IE11, Anda hanya dapat menggunakan pekerja web: IE11 tidak memiliki pekerja layanan, dan tampaknya akhir dari dukungan untuk IE11 adalah pada 14 Oktober 2025 .
Ada perbedaan halus dalam dukungan API mereka di seluruh browser, lihat Tes Pekerja HTML5 (juga oleh Nolan Lawson). Di browser tertentu, satu jenis pekerja mungkin mendukung panggilan API tertentu sedangkan yang lainnya tidak. Kunjungi halaman itu dan uji browser Anda sendiri!