Siklus proses pekerja layanan ekstensi

Worker layanan ekstensi merespons peristiwa worker layanan 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 pekerja layanan dari Chrome Web Store atau saat mereka memuat atau mengupdate ekstensi yang tidak dikemas menggunakan halaman chrome://extensions. Tiga peristiwa terjadi dalam urutan ini:

  1. install
  2. onInstall
  3. activate

ServiceWorkerRegistration.install

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

chrome.runtime.onInstalled

Berikutnya adalah peristiwa onInstalled ekstensi, yang dipicu saat ekstensi (bukan pekerja layanan) 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.

chrome.runtime.onInstalled.addListener((details) => {
  if(details.reason !== "install" && details.reason !== "update") return;
  chrome.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 chrome.runtime.onStartup akan diaktifkan, tetapi tidak ada peristiwa pekerja layanan yang dipanggil.

Mode tidak ada aktivitas dan penonaktifan

Biasanya, Chrome menghentikan pekerja layanan saat 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 pekerja layanan tidak aktif, peristiwa masuk akan mengaktifkannya kembali. Namun, Anda harus mendesain pekerja layanan 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 pekerja layanan berhenti. Daripada menggunakan variabel global, simpan nilai ke penyimpanan. Opsi Anda akan tercantum.

chrome.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 akan 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 chrome.storage.

Pilih versi Chrome minimum

Sejak rilis Manifes V3, kami telah melakukan beberapa peningkatan pada masa aktif pekerja layanan. Artinya, jika ekstensi Manifes V3 Anda mendukung Chrome versi sebelumnya, ada kondisi yang harus Anda ketahui. 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 pekerja layanan. Lihat chrome.alarms untuk mengetahui detail selengkapnya.

Chrome 118

Sesi debugger aktif yang dibuat menggunakan API chrome.debugger kini membuat pekerja layanan tetap aktif. Hal ini mencegah pekerja layanan kehabisan waktu selama panggilan untuk API ini.

Chrome 116

Chrome 116 memperkenalkan peningkatan masa aktif pekerja layanan berikut:

Chrome 114

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

Chrome 110

Panggilan API ekstensi mereset timer. Sebelumnya, hanya menjalankan pengendali peristiwa yang akan membuat pekerja layanan tetap aktif. Acara apa pun yang diantrekan, tetapi penanganannya 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 chrome.runtime.connectNative() akan membuat pekerja layanan tetap aktif. Jika proses host mengalami error atau dimatikan, port akan ditutup dan pekerja layanan akan dihentikan setelah timer selesai. Lindungi diri Anda dari hal ini dengan memanggil chrome.runtime.connectNative() di pengendali peristiwa onDisconnect port.