Siklus proses pekerja layanan ekstensi

Pekerja layanan ekstensi merespons peristiwa pekerja layanan standar dan peristiwa dalam namespace ekstensi. Mereka disajikan 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 belum dibuka menggunakan halaman chrome://extensions. Tiga peristiwa terjadi secara berurutan di bawah ini.

ServiceWorkerRegistration.install

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

chrome.runtime.onInstalled

Berikutnya adalah peristiwa onInstalled ekstensi, yang diaktifkan 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 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 akan diaktifkan. Perhatikan bahwa tidak seperti pekerja layanan web, peristiwa ini langsung diaktifkan setelah penginstalan ekstensi karena tidak ada yang sebanding dengan pemuatan ulang halaman dalam ekstensi.

Peluncuran ekstensi

Saat profil pengguna dimulai, peristiwa chrome.runtime.onStartup diaktifkan, tetapi tidak ada peristiwa pekerja layanan yang dipanggil.

Tidak ada aktivitas dan nonaktif

Biasanya, Chrome menghentikan pekerja layanan bila salah satu kondisi berikut terpenuhi:

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

Peristiwa dan panggilan ke API ekstensi akan mereset timer ini, dan jika pekerja layanan sudah tidak aktif, peristiwa masuk akan mengaktifkannya kembali. Meskipun demikian, Anda harus mendesain pekerja layanan agar tangguh terhadap penghentian yang tidak terduga.

Untuk mengoptimalkan konsumsi resource ekstensi, hindari membuat pekerja layanan tetap aktif tanpa batas waktu jika memungkinkan. Uji ekstensi Anda untuk memastikan Anda tidak melakukannya secara tidak sengaja.

Mempertahankan data, bukan menggunakan variabel global

Variabel global apa pun yang Anda tetapkan akan hilang jika pekerja layanan dimatikan. Daripada menggunakan variabel global, simpan nilai ke penyimpanan. Opsi Anda tercantum di bawah ini. Perhatikan bahwa Web Storage API tidak tersedia untuk pekerja layanan ekstensi.

API chrome.storage
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 menghapus cache web.
IndexedDB API
API level rendah untuk penyimpanan data terstruktur sisi klien, termasuk file dan blob. API ini menyediakan primitif untuk membuat penyimpanan dan pengambilan data transaksi. Meskipun API ini sering kali terlalu rumit untuk kasus penggunaan sederhana, sejumlah solusi penyimpanan pihak ketiga dibuat di atasnya.
CacheStorage API
Mekanisme penyimpanan persisten untuk pasangan objek Request dan Response. API ini didesain khusus untuk web service worker dan digunakan untuk mengambil data dari endpoint. Ada berbagai cara untuk menggunakan API ini, bergantung pada apakah pengguna melihat data terbaru dan seberapa penting. Untuk informasi selengkapnya, lihat Buku Resep Offline. Sebaiknya Anda menggunakan chrome.storage, kecuali jika Anda secara khusus melakukan proxy permintaan jaringan melalui pengendali pengambilan.

Pilih versi Chrome minimum

Sejak rilis Manifest V3, kami telah melakukan beberapa peningkatan pada masa aktif pekerja layanan. Artinya, jika ekstensi Manifest V3 Anda mendukung Chrome versi lama, ada beberapa kondisi yang perlu Anda ketahui. Jika kondisi ini tidak memengaruhi ekstensi, Anda dapat melanjutkan dari bagian ini. Jika ya, pertimbangkan untuk menentukan versi Chrome minimum dalam manifes Anda.

Chrome 120

Alarm kini bisa 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 chrome.debugger API 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:

  • Koneksi WebSocket yang aktif kini memperpanjang masa aktif pekerja layanan ekstensi. Mengirim atau menerima pesan melalui WebSocket dalam pekerja layanan ekstensi akan mereset timer tidak ada aktivitas pekerja layanan.

  • API ekstensi tambahan diizinkan untuk melewati periode waktu tunggu lima menit untuk pekerja layanan ekstensi. API ini menampilkan perintah pengguna sehingga mungkin perlu waktu lebih dari lima menit untuk menyelesaikannya. Perangkat tersebut mencakup desktopCapture.chooseDesktopMedia(), identity.launchWebAuthFlow(), management.uninstall(), dan permissions.request().

Chrome 114

Mengirim pesan menggunakan pesan berdurasi panjang akan membuat pekerja layanan tetap aktif. Sebelumnya, membuka port akan mereset timer, tetapi mengirim pesan tidak melakukannya. Membuka port tidak lagi menyetel ulang timer.

Chrome 110

Panggilan API ekstensi akan mereset timer. Sebelum ini, hanya menjalankan pengendali peristiwa yang akan membuat pekerja layanan tetap aktif. Setiap peristiwa yang ada dalam antrean, tetapi tidak dipanggil untuk pengendali, tidak akan menyebabkan reset.

Chrome 109

Pesan yang dikirim dari dokumen di luar layar akan menyetel ulang timer.

Chrome 105

Terhubung 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. Cegah masalah ini dengan memanggil chrome.runtime.connectNative() di pengendali peristiwa onPutuskan koneksi port.