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 etkinleştir 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şlatma

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 almanız veya uzantı API'sini çağırmanız bu zamanlayıcıyı sıfırlar.
  • Bir etkinlik veya API çağrısı gibi tek bir isteğin işlenmesi 5 dakikadan uzun sürerse.
  • 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 servis çalışanınızı süresiz olarak etkin durumda tutmayı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ı hale getirme

Hizmet çalışanı kapanırsa ayarladığınız tüm genel değişkenler kaybolur. 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
Yerel, oturum, yönetilen (alan) ve senkronizasyon olmak üzere birden fazla depolama alanı 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
Dosya 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
İ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örüp görmediğine ve bu durumun ne kadar önemli olduğuna 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'inizde 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 chrome.alarms sayfasına bakın.

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, hizmet çalışanı ömrü için aşağıdaki iyileştirmeleri kullanıma sundu:

  • Etkin WebSocket bağlantıları artık uzantı hizmet işçisi sürelerini uzatır. 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'ler kullanıcı istemi görüntüler. 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. Daha önce, bir bağlantı noktası açıldığında zamanlayıcılar sıfırlanıyordu ancak ileti gönderildiğinde sıfırlanmıyordu. 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 işleyicisi çağrılmamış etkinlikler sıfırlanmaya neden olmaz.

Chrome 109

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

Chrome 105

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.