Pekerja layanan ekstensi kini dapat tetap aktif selama menerima peristiwa. Hal ini meningkatkan keandalan pekerja layanan ekstensi, tetapi memiliki kekurangan yang harus Anda hindari.
Mulai Chrome 110 (dalam versi beta mulai 7 Februari 2023), pekerja layanan ekstensi akan tetap aktif selama menerima peristiwa. Hal ini memperbaiki masalah pengaturan waktu dalam penerapan pekerja layanan ekstensi sebelumnya. Waktu tunggu dapat terjadi saat peristiwa baru berada dalam antrean peristiwa dan waktu tunggu dapat memotong pekerjaan asinkron. Peningkatan ini menghapus masa aktif maksimum lima menit yang ketat untuk pekerja layanan ekstensi.
Artikel ini menjelaskan perubahan perilaku tersebut.
Latar belakang
Service worker ekstensi sebagian besar berperilaku seperti service worker web, tetapi selain peristiwa service worker, service worker ekstensi juga dapat memproses peristiwa ekstensi. Meskipun peristiwa pekerja layanan normal memperpanjang masa aktif pekerja layanan, sebelum rilis 110 hanya ada beberapa peristiwa platform ekstensi yang membuat pekerja layanan ekstensi tetap aktif.
Biasanya, Chromium menghentikan pekerja layanan setelah salah satu kondisi berikut terpenuhi:
- Pekerja layanan belum menerima peristiwa selama lebih dari tiga puluh detik dan tidak ada tugas yang berjalan lama yang sedang berlangsung. Jika pekerja layanan menerima peristiwa selama waktu tersebut, timer tidak ada aktivitas akan dihapus.
- Tugas yang berjalan lama memerlukan waktu lebih dari lima menit untuk diselesaikan dan tidak ada peristiwa yang diterima dalam tiga puluh detik terakhir.
Peristiwa pekerja layanan baru yang diterima sebelum timer tidak ada aktivitas atau timer tugas yang berjalan lama berakhir akan mereset timer dan memperpanjang masa aktif pekerja layanan.
Sayangnya, perilaku ini tidak berlaku untuk peristiwa ekstensi. Peristiwa ekstensi dapat mengaktifkan pekerja layanan ekstensi, dan membuatnya tetap aktif hingga peristiwa selesai, tetapi tidak dapat memperpanjang timer tidak ada aktivitas selama tiga puluh detik. Hal ini secara efektif berarti bahwa pekerja layanan ekstensi dapat dihentikan kapan saja setelah peristiwa ekstensi terakhir selesai, meskipun browser baru saja mengirim peristiwa baru ke ekstensi.
Yang berubah
Mulai Chrome 110, semua peristiwa akan mereset timer tidak ada aktivitas dan waktu tunggu tidak ada aktivitas tidak akan terjadi jika ada peristiwa yang tertunda. Dengan kata lain, dengan asumsi tidak ada gangguan yang tidak terduga, pekerja layanan ekstensi kini biasanya akan tetap aktif selama mereka secara aktif memproses peristiwa. Selain itu, panggilan ke API Chrome khusus ekstensi, seperti chrome.storage.local.get()
, akan mereset waktu tunggu tidak ada aktivitas. Khususnya:
- Pekerja layanan akan dihentikan setelah 30 detik tidak ada aktivitas. (Menerima peristiwa atau memanggil API ekstensi akan mereset timer ini).
- Pekerja layanan akan dihentikan jika satu permintaan, seperti peristiwa atau panggilan API, memerlukan waktu lebih dari 5 menit untuk diproses.
Beberapa API seperti pesan native menyediakan keep-alive yang kuat yang membatalkan kedua timer ini.
Kami masih berupaya memastikan bahwa pekerja layanan ekstensi dihentikan jika memungkinkan, tanpa menonaktifkan pekerjaan yang berjalan lama. Pekerja layanan ekstensi yang hemat resource harus selalu menghasilkan jika memungkinkan. Selain itu, ekstensi harus bersiap menghadapi penghentian yang tidak terduga dengan mempertahankan status. Tindakan ini melindungi dari peristiwa yang tidak dapat diprediksi seperti browser yang ditutup paksa oleh pengguna.
Foto oleh Paula Guerreiro di Unsplash