Siklus proses pekerja layanan ekstensi

Worker layanan ekstensi merespons peristiwa service worker standar dan peristiwa di namespace ekstensi. Keduanya ditampilkan bersama karena sering kali satu jenis mengikuti jenis lainnya selama penggunaan ekstensi.

Penginstalan

Penginstalan terjadi saat pengguna menginstal atau mengupdate service worker dari Chrome Web Store atau saat mereka memuat atau mengupdate ekstensi mode developer menggunakan halaman chrome://extensions. Tiga peristiwa terjadi dalam urutan ini:

  1. install (peristiwa service worker)
  2. browser.runtime.onInstalled (peristiwa ekstensi)
  3. activate (peristiwa service worker)

ServiceWorkerRegistration.install

Peristiwa pertama yang diaktifkan selama penginstalan adalah peristiwa install pekerja layanan web.

browser.runtime.onInstalled

Berikutnya adalah peristiwa onInstalled ekstensi, yang dipicu saat ekstensi (bukan service worker) pertama kali diinstal, saat ekstensi diupdate ke versi baru, dan saat Chrome diupdate ke versi baru. Gunakan peristiwa ini untuk menetapkan status atau untuk inisialisasi satu kali, seperti menu konteks.

browser.runtime.onInstalled.addListener((details) => {
  if(details.reason !== "install" && details.reason !== "update") return;
  browser.contextMenus.create({
    "id": "sampleContextMenu",
    "title": "Sample Context Menu",
    "contexts": ["selection"]
  });
});

ServiceWorkerRegistration.active

Terakhir, peristiwa activate pekerja layanan diaktifkan. Perhatikan bahwa tidak seperti pekerja layanan web, peristiwa ini diaktifkan segera setelah penginstalan ekstensi karena tidak ada yang sebanding dengan pemuatan ulang halaman di ekstensi.

Mulai ekstensi

Saat profil pengguna dimulai, peristiwa browser.runtime.onStartup diaktifkan, tetapi tidak ada peristiwa service worker yang dipanggil.

Mode tidak ada aktivitas dan penonaktifan

Biasanya, Chrome menghentikan service worker jika salah satu kondisi berikut terpenuhi:

  • Setelah 30 detik tidak ada aktivitas. Menerima peristiwa atau memanggil API ekstensi akan mereset timer ini.
  • Saat satu permintaan, seperti peristiwa atau panggilan API, memerlukan waktu lebih dari 5 menit untuk diproses.
  • Jika respons fetch() memerlukan waktu lebih dari 30 detik untuk tiba.

Peristiwa dan panggilan ke API ekstensi akan mereset timer ini, dan jika service worker telah tidak aktif, peristiwa masuk akan mengaktifkannya kembali. Namun, Anda harus mendesain service worker agar tangguh terhadap penghentian yang tidak terduga.

Untuk mengoptimalkan konsumsi resource ekstensi, hindari agar service worker tetap aktif tanpa batas waktu jika memungkinkan. Uji ekstensi Anda untuk memastikan Anda tidak melakukannya secara tidak sengaja.

Mempertahankan data daripada menggunakan variabel global

Setiap variabel global yang Anda tetapkan akan hilang jika service worker berhenti. Daripada menggunakan variabel global, simpan nilai ke penyimpanan. Opsi Anda akan tercantum.

browser.storage API
API ekstensi yang menawarkan beberapa jenis penyimpanan; lokal, sesi, terkelola (domain), dan sinkronisasi. API ini menyimpan objek JSON yang diidentifikasi dan diambil dengan kunci yang ditentukan developer. Jenis penyimpanan ini tidak dihapus saat pengguna mengosongkan cache web.
IndexedDB API
API tingkat rendah untuk penyimpanan data terstruktur sisi klien, termasuk file dan blob. API ini menyediakan primitif untuk membuat penyimpanan dan pengambilan data transaksional. Meskipun API ini sering kali terlalu rumit untuk beberapa kasus penggunaan, sejumlah solusi penyimpanan pihak ketiga dibangun di atasnya.
CacheStorage API
Mekanisme penyimpanan persisten untuk pasangan objek Permintaan dan Respons. API ini dirancang khusus untuk pekerja layanan web dan digunakan untuk mengambil data dari endpoint. Ada berbagai cara untuk menggunakan API ini, bergantung pada apakah dan seberapa penting pengguna melihat data terbaru. Untuk mengetahui informasi selengkapnya, lihat The Offline Cookbook. Kecuali jika Anda secara khusus melakukan proxy permintaan jaringan menggunakan pengendali pengambilan, Anda harus menggunakan browser.storage.

Pilih versi Chrome minimum

Sejak rilis Manifest V3, kami telah melakukan beberapa peningkatan pada masa aktif service worker. Artinya, jika ekstensi Manifes V3 Anda mendukung Chrome versi sebelumnya, ada kondisi yang harus Anda perhatikan. Jika kondisi ini tidak memengaruhi ekstensi Anda, Anda dapat melanjutkan dari bagian ini. Jika ya, pertimbangkan untuk menentukan versi Chrome minimum dalam manifes Anda.

Chrome 120

Alarm kini dapat disetel ke periode minimum 30 detik agar sesuai dengan siklus proses service worker. Lihat browser.alarms untuk mengetahui detail selengkapnya.

Chrome 118

Sesi debugger aktif yang dibuat menggunakan API browser.debugger kini membuat service worker tetap aktif. Hal ini mencegah waktu tunggu habis untuk pekerja layanan selama panggilan untuk API ini.

Chrome 116

Chrome 116 memperkenalkan peningkatan masa aktif service worker berikut:

Chrome 114

Mengirim pesan dengan pesan yang berjalan lama membuat service worker tetap aktif. Membuka port tidak lagi mereset timer.

Chrome 110

Panggilan API ekstensi mereset timer. Sebelumnya, hanya handler peristiwa yang sedang berjalan yang akan membuat service worker tetap aktif. Peristiwa apa pun yang diantrekan, tetapi handler-nya belum dipanggil, tidak akan menyebabkan reset.

Chrome 109

Pesan yang dikirim dari dokumen di luar layar akan mereset timer.

Chrome 105

Menghubungkan ke host pesan native menggunakan browser.runtime.connectNative() akan membuat service worker tetap aktif. Jika proses host mengalami error atau dimatikan, port akan ditutup dan service worker akan dihentikan setelah timer selesai. Lindungi dari hal ini dengan memanggil browser.runtime.connectNative() di pengendali peristiwa onDisconnect port.