Masa aktif pekerja layanan ekstensi yang lebih lama

Pekerja layanan ekstensi sekarang bisa tetap aktif selama mereka menerima peristiwa. Hal ini meningkatkan keandalan pekerja layanan ekstensi, tetapi memiliki kesalahan yang harus Anda hindari.

Joe Medley
Joe Medley

Mulai Chrome 110 (dalam versi beta per 7 Februari 2023), pekerja layanan ekstensi akan tetap aktif selama mereka menerima peristiwa. Hal ini memperbaiki masalah waktu dalam implementasi pekerja layanan ekstensi sebelumnya. Waktu tunggu dapat terjadi saat peristiwa baru berada dalam antrean peristiwa dan waktu tunggu habis untuk memotong pekerjaan asinkron. Peningkatan ini menghilangkan masa pakai maksimum lima menit yang sulit untuk pekerja layanan ekstensi.

Artikel ini menjelaskan perubahan perilaku tersebut.

Latar belakang

Sebagian besar pekerja layanan ekstensi berperilaku seperti web service worker, tetapi selain peristiwa service worker, pekerja layanan ekstensi juga dapat memproses peristiwa ekstensi. Meskipun peristiwa pekerja layanan normal memperpanjang masa pakai pekerja layanan, sebelum rilis 110, hanya 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 berjalan lama yang sedang berlangsung. Jika pekerja layanan menerima peristiwa selama waktu itu, timer tidak ada aktivitas akan dihapus.
  • Tugas yang berjalan lama butuh 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 pakai 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 tiga puluh detik. Artinya, pekerja layanan ekstensi dapat dihentikan kapan saja setelah peristiwa ekstensi terakhir selesai, meskipun browser baru saja mengirim peristiwa baru ke ekstensi.

Beberapa hal 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 biasanya akan tetap aktif selama mereka secara aktif memproses peristiwa. Selain itu, panggilan ke Chrome API khusus ekstensi, seperti chrome.storage.local.get(), akan mereset waktu tunggu tidak ada aktivitas. Khususnya:

  • Pekerja layanan akan dihentikan setelah 30 detik tidak aktif. (Menerima peristiwa atau memanggil API ekstensi akan mereset timer ini).
  • Pekerja layanan akan dihentikan jika satu permintaan, seperti peristiwa atau panggilan API, memerlukan waktu pemrosesan lebih dari 5 menit.

Beberapa API seperti pesan native menyediakan keep-alive yang kuat yang membatalkan kedua timer ini.

Kami masih berupaya untuk memastikan bahwa pekerja layanan ekstensi dapat dihentikan jika memungkinkan, tanpa menghentikan pekerjaan yang berjalan lama. Pekerja layanan ekstensi yang memperhatikan resource harus selalu menghasilkan jika memungkinkan. Selain itu, ekstensi harus bersiap untuk penghentian yang tidak terduga dengan mempertahankan status. Hal ini melindungi dari peristiwa yang tidak dapat diprediksi seperti browser yang ditutup paksa oleh pengguna.

Foto oleh Paula Guerreiro di Unsplash