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

Uzantı hizmet işçileri hem standart hizmet işçisi etkinliklerine hem de uzantı ad alanlarında gerçekleşen etkinliklere yanıt verir. Bu türler, genellikle bir uzantı kullanılırken bir tür diğerini takip ettiği için birlikte sunulur.

Kurulum

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 ayrıştırılmamış 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, web hizmeti çalışanının install etkinliğidir.

chrome.runtime.onInstalled

Ardından, uzantının onInstalled etkinliği gelir. Bu etkinlik, uzantı (hizmet çalışanı değil) ilk kez yüklendiğinde, uzantı yeni bir sürüme güncellendiğinde ve Chrome yeni bir sürüme güncellendiğinde tetiklenir. Bir durum ayarlamak veya bağlam menüsü gibi tek seferlik başlatma işlemi yapmak 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 hizmet çalışanlarının aksine, uzantılarda sayfayı yeniden yükleme işlemi olmadığından bu etkinliğin uzantı yüklendikten hemen sonra tetiklendiğini unutmayın.

Uzantı başlangıcı

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

Boşta kalma ve kapatma

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

  • 30 saniye boyunca işlem yapılmadığında. Bir etkinlik alındığında veya bir uzantı API'si çağrıldığında bu zamanlayıcı sıfırlanır.
  • Etkinlik veya API çağrısı gibi tek bir isteğin işlenmesi 5 dakikadan uzun sürüyorsa.
  • fetch() yanıtının gelmesi 30 saniyeden uzun sürerse

Etkinlikler ve uzantı API'lerine yapılan çağrılar bu zamanlayıcıları sıfırlar. Hizmet çalışanı etkin değilse gelen bir etkinlik, çalışanı yeniden etkinleştirir. Yine de hizmet çalışanınızı beklenmedik sonlandırmalara 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 aktif tutmaktan kaçının. Bu işlemi yanlışlıkla yapmadığınızdan emin olmak için uzantılarınızı test edin.

Genel değişkenler kullanmak yerine verileri kalıcıdır

Hizmet çalışanı kapanırsa ayarladığınız tüm genel değişkenler kaybedilir. Değerleri depolama alanına kaydetmek için genel değişkenler yerine kullanın. Seçenekleriniz aşağıda listelenmiştir. Web Storage API'nin uzantı hizmet işçileri tarafından kullanılamadığını unutmayın.

chrome.storage API
Birden fazla depolama türü sunan bir uzantı API'si: yerel, oturum, yönetilen (alan adı) ve senkronizasyon. 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 alanları kaldırılmaz.
IndexedDB API'si
Dosyalar ve blob'lar dahil olmak üzere yapılandırılmış verilerin istemci tarafında depolanması için düşük düzey bir API. Bu API, işleme yönelik veri depolama ve alma işlemleri için temel öğeler sağlar. Bu API genellikle basit kullanım alanları için çok karmaşık olsa da bu API'nin üzerine birçok üçüncü taraf depolama çözümü inşa edilmiştir.
CacheStorage API'si
İ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. Kullanıcıların güncel verileri görmesinin önemine ve önemine bağlı olarak bu API'yi kullanmanın çeşitli yolları vardır. Daha fazla bilgi için Çevrimdışı Tarif Defteri başlıklı makaleyi inceleyin. Ağ isteklerini özellikle getirme işleyicisi aracılığıyla proxy olarak kullanmıyorsanız chrome.storage değerini kullanmanız gerekir.

Minimum Chrome sürümü seçme

Manifest V3'ün yayınlanmasından bu yana hizmet işçisi ömürlerinde çeşitli iyileştirmeler yaptık. Bu, Manifest V3 uzantınız Chrome'un önceki sürümlerini destekliyorsa dikkat etmeniz gereken koşullar olduğu anlamına gelir. Bu koşullar uzantınızı etkilemiyorsa bu bölümden geçebilirsiniz. Bu durumda, manifest dosyanızda minimum Chrome sürümü belirtebilirsiniz.

Chrome 120

Alarmlar artık hizmet çalışanı yaşam döngüsü ile eşleşecek şekilde minimum 30 saniyelik bir süreye ayarlanabilir. Daha fazla bilgi için bkz. chrome.alarms.

Chrome 118

chrome.debugger API'si kullanılarak oluşturulan etkin hata ayıklayıcı oturumları artık hizmet çalışanını etkin durumda tutar. Bu sayede, hizmet işçileri bu API'ye yapılan çağrılar sırasında zaman aşımı sorunu yaşamaz.

Chrome 116

Chrome 116'da aşağıdaki hizmet çalışanı yaşam boyu iyileştirmelerini kullanıma sunduk:

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

  • Ek uzantı API'lerinin, uzantı hizmet işçileri için beş dakikalık zaman aşımı süresini aşmasına izin verilir. Bu API'lerde bir kullanıcı istemi gösterilir. Bu nedenle, sorunun çözülmesi beş dakikadan uzun sürebilir. Bunlar arasında desktopCapture.chooseDesktopMedia(), identity.launchWebAuthFlow(), management.uninstall() ve permissions.request() yer alır.

Chrome 114

Uzun ömürlü mesajlaşma kullanılarak gönderilen mesajlar, hizmet çalışanını etkin durumda tutar. Önceden, bir bağlantı noktası açıldığında zamanlayıcılar sıfırlanıyor ancak mesaj gönderilmiyordu. Bağlantı noktası açıldığında artık zamanlayıcılar sıfırlanmıyor.

Chrome 110

Uzantı API çağrıları zamanlayıcıları sıfırlar. Bundan önce, yalnızca çalışan etkinlik işleyiciler bir hizmet çalışanını etkin tutardı. Sıraya alınmış ancak bir işleyici çağrılmamış etkinlikler sıfırlamaya neden olmaz.

Chrome 109 sürümü

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

Chrome 105 sürümü

chrome.runtime.connectNative() kullanarak yerel bir mesajlaşma ana makinesine bağlanmak, hizmet çalışanını etkin durumda tutar. Ana makine işlemi kilitlenirse veya kapatılırsa bağlantı noktası kapatılır ve zamanlayıcılar tamamlandıktan sonra servis çalışanı sonlandırılır. Bağlantı noktası onDisconnect etkinlik işleyicisinde chrome.runtime.connectNative()'ü çağırarak bu duruma karşı önlem alın.