Uzantı hizmet çalışanının yaşam döngüsü

Uzantı hizmet çalışanları, hem standart hizmet çalışanı etkinliklerine hem de uzantı ad alanlarındaki etkinliklere yanıt verir. Bunlar, genellikle uzantı kullanılırken bir türün diğerini takip ettiği için birlikte sunulurlar.

Döşeme

Yükleme, kullanıcı Chrome Web Mağazası'ndan bir hizmet çalışanı yüklediğinde veya güncellediğinde ya da chrome://extensions sayfasını kullanarak paketlenmemiş bir uzantıyı yüklediğinde veya güncellediğinde gerçekleşir. Aşağıdaki sırayla üç etkinlik gerçekleşir.

ServiceWorkerRegistration.install

Yükleme sırasında tetiklenen ilk etkinlik bir web hizmeti çalışanının install etkinliğidir.

chrome.runtime.onInstalled

Bir sonraki adım, uzantı (hizmet çalışanı değil) ilk yüklendiğinde, uzantı yeni bir sürüme güncellendiğinde ve Chrome yeni bir sürüme güncellendiğinde tetiklenen onInstalled etkinliğidir. Durum ayarlamak veya içerik menüsü gibi tek seferlik başlatma işlemi için bu etkinliği kullanın.

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

Son olarak, hizmet çalışanının activate etkinliği tetiklenir. Web Service Worker'larından farklı olarak bu etkinlik, uzantı yüklendikten hemen sonra etkinleşir çünkü bir uzantıda sayfanın yeniden yüklenmesiyle karşılaştırılabilir bir şey yoktur.

Uzantı başlatma

Bir kullanıcı profili başladığında chrome.runtime.onStartup etkinliği tetiklenir ancak herhangi bir hizmet çalışanı etkinliği çağrılmaz.

Boşta kalma ve kapatma

Normalde Chrome, aşağıdaki koşullardan biri karşılandığında hizmet çalışanını sonlandırır:

  • 30 saniye hiçbir işlem yapılmadığında. Bir etkinlik alındığında veya bir uzantı API'sinin çağrılması durumunda bu zamanlayıcı sıfırlanır.
  • Etkinlik veya API çağrısı gibi tek bir isteğin işlenmesi 5 dakikadan uzun sürdüğünde.
  • fetch() yanıtının ulaşması 30 saniyeden uzun sürdüğünde.

Etkinlikler ve uzantı API'lerine yapılan çağrılar bu zamanlayıcıları sıfırlar ve hizmet çalışanı etkin değilse gelen bir etkinlik bunları canlandırır. Yine de hizmet çalışanınızı beklenmedik fesih işlemlerine karşı dayanıklı olacak şekilde tasarlamanız gerekir.

Uzantınızın kaynak tüketimini optimize etmek için mümkünse hizmet çalışanınızı süresiz olarak etkin durumda tutmaktan kaçının. Bunu istemeden yapmadığınızdan emin olmak için uzantılarınızı test edin.

Genel değişkenler kullanmak yerine verileri korumak

Service Worker kapatılırsa ayarladığınız tüm genel değişkenler kaybolur. Genel değişkenler kullanmak yerine değerleri depolama alanına kaydedin. Seçenekleriniz aşağıda listelenmiştir. Web Storage API'nin, uzantı hizmeti çalışanları tarafından kullanılamayacağını unutmayın.

chrome.storage API
Yerel, oturum, yönetilen (alan adı) ve senkronizasyon olmak üzere birden fazla depolama türü sunan bir uzantı API'si. Bu API, geliştirici tarafından tanımlanan anahtarlarla tanımlanan ve alınan JSON nesnelerini depolar. Kullanıcı web önbelleğini temizlediğinde bu tür depolama alanı kaldırılmaz.
IndexedDB API
Dosyalar ve blob'lar dahil olmak üzere yapılandırılmış verilerin istemci tarafında depolanması için kullanılan alt düzey bir API. Bu API, işlem verilerinin depolanması ve alınmasıyla ilgili temel bilgiler sağlar. Bu API, basit kullanım alanları için genellikle çok karmaşık olsa da bazı üçüncü taraf depolama çözümleri bunun üzerine geliştirilmiştir.
CacheStorage API
İstek ve Yanıt nesne çiftleri için kalıcı depolama mekanizması. Bu API, web hizmeti çalışanları için özel olarak tasarlanmıştır ve bir uç noktadan veri almak için kullanılır. Bu API'yi kullanmanın çeşitli yolları vardır. Bu yöntemler, kullanıcıların güncel verileri görmelerinin kritik öneme sahip olup olmadıklarına bağlıdır. Daha fazla bilgi için Çevrimdışı Tarif Defteri'ne bakın. Ağ isteklerine özellikle getirme işleyici aracılığıyla proxy yapmıyorsanız chrome.storage kullanmalısınız.

Minimum Chrome sürümü seçin

Manifest V3'ün yayınlanmasından bu yana hizmet çalışanlarının kullanım ömründe çeşitli iyileştirmeler yaptık. Yani Manifest V3 uzantınız Chrome'un önceki sürümlerini destekliyorsa bilmeniz gereken koşullar vardır. Bu koşullar uzantınızı etkilemiyorsa bu bölümden devam edebilirsiniz. Kullanıyorlarsa manifest dosyanızda minimum bir Chrome sürümü belirtmeyi düşünebilirsiniz.

Chrome 120

Alarmlar artık hizmet çalışanı yaşam döngüsüne uygun olarak en az 30 saniyelik bir süreye ayarlanabilir. Ayrıntılı bilgi için chrome.alarms sayfasını inceleyin.

Chrome 118

chrome.debugger API kullanılarak oluşturulan etkin hata ayıklayıcı oturumları artık hizmet çalışanının aktif kalmasını sağlar. Bu, hizmet çalışanlarının bu API için yapılan çağrılar sırasında zaman aşımına uğramasını önler.

Chrome 116

Chrome 116'da, hizmet çalışanı ömrü için aşağıdaki iyileştirmeler yapıldı:

  • Etkin WebSocket bağlantıları artık uzantı hizmet çalışanlarının kullanım ömrünü uzatıyor. Uzantı hizmet çalışanındaki bir WebSocket üzerinden mesaj almak veya göndermek, hizmet çalışanının boşta kalma zamanlayıcısını sıfırlar.

  • Ek uzantı API'lerinin, uzantı hizmet çalışanları için beş dakikalık zaman aşımı süresini geçmesine izin verilir. Bu API'ler bir kullanıcı istemi gösterir ve bu nedenle, çözümlenmesi beş dakikadan uzun sürebilir. Bunlar arasında desktopCapture.chooseDesktopMedia(), identity.launchWebAuthFlow(), management.uninstall() ve permissions.request() yer alır.

Chrome 114

Uzun süreli mesajlaşma özelliğini kullanarak mesaj göndermek hizmet çalışanının aktif kalmasını sağlar. Önceden, bir bağlantı noktası açıldığında zamanlayıcılar sıfırlanıyordu ama ileti gönderilmiyordu. Bir bağlantı noktası açıldığında zamanlayıcılar artık sıfırlanmaz.

Chrome 110

Extension API çağrıları, zamanlayıcıları sıfırlar. Bu tarihten önce, yalnızca çalışan etkinlik işleyiciler hizmet çalışanının aktif kalmasını sağlıyordu. Sıraya alınan ancak bir işleyicinin çağrılmadığı etkinlikler sıfırlamaya neden olmaz.

Chrome 109

Ekran dışındaki bir dokümandan gönderilen mesajlar zamanlayıcıları sıfırlar.

Chrome 105

chrome.runtime.connectNative() kullanarak yerel mesajlaşma ana makinesine bağlanma, hizmet çalışanının aktif kalmasını sağlar. Ana makine işlemi çökerse veya kapatılırsa bağlantı noktası kapatılır ve zamanlayıcılar tamamlandıktan sonra hizmet çalışanı feshedilir. Bağlantı noktasının onBağlantıyı etkinlik işleyicisinde chrome.runtime.connectNative() çağrısı yaparak bu duruma karşı kendinizi koruyun.