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ındaWebSocket
ü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()
vepermissions.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.