Uzantı hizmeti çalışanları, etkinlik aldıkları sürece artık yayında kalabilir. Bu, uzantı hizmetleri çalışanlarının güvenilirliğini artırır ancak kaçınmanız gereken bir tehlike içerir.
Chrome 110'dan itibaren (7 Şubat 2023'ten itibaren beta sürümündedir) uzantı hizmeti çalışanları, etkinlik aldıkları sürece sürecektir. Bu işlem, uzantı hizmet çalışanlarının önceki uygulamasındaki zamanlama sorununu düzeltir. Etkinlik sırasında yeni etkinlikler olduğunda zaman aşımları meydana gelebilir ve zaman aşımları, eşzamansız çalışmaların kısaltılmasına neden olabilirdi. Bu iyileştirme, uzantı hizmeti çalışanlarının beş dakikalık maksimum kullanım ömrünü ortadan kaldırır.
Bu makalede, söz konusu davranışların nasıl değiştiği açıklanmaktadır.
Arka plan
Uzantı hizmeti çalışanları, çoğunlukla web hizmeti çalışanları gibi davranır ancak service çalışanı etkinliklerine ek olarak uzantı hizmeti çalışanları da uzantı etkinliklerini dinleyebilir. Normal Service Worker etkinlikleri, hizmet çalışanının ömrünü uzatsa da, 110 kullanıma sunulmadan önce yalnızca birkaç uzantı platformu etkinliği bir uzantı hizmet çalışanını aktif durumda tutmuştur.
Normalde Chromium, aşağıdaki koşullardan biri karşılandıktan sonra bir hizmet çalışanını fesheder:
- Hizmet çalışanı otuz saniyeden uzun bir süredir etkinlik almadı ve devam eden bekleyen ve uzun süreli bir görev yok. Bir hizmet çalışanı bu süre içinde bir etkinlik aldıysa boşta kalma zamanlayıcısı kaldırılmıştır.
- Uzun süren bir görevin tamamlanması beş dakikadan uzun sürdü ve son otuz saniye içinde hiçbir etkinlik alınmadı.
Boşta kalma zamanlayıcısı veya uzun çalışan görev zamanlayıcısı dolmadan önce alınan yeni hizmet çalışanı etkinlikleri zamanlayıcıları sıfırlar ve hizmet çalışanının ömrünü uzatır.
Maalesef bu davranış, uzantı etkinlikleri için geçerli değildi. Uzantı etkinlikleri bir uzantı hizmet çalışanını uyandırabilir ve etkinlik tamamlanana kadar aktif durumda tutabilir. Ancak, otuz saniyelik boşta kalma zamanlayıcısını uzatamaz. Bu, tarayıcı uzantıya kısa süre önce yeni bir etkinlik göndermiş olsa bile, uzantı hizmeti çalışanlarının son uzantı etkinliği tamamlandıktan sonra herhangi bir zamanda sonlandırılabileceği anlamına geliyordu.
Neler değişti?
Chrome 110 sürümünden itibaren, tüm etkinlikler boşta kalma zamanlayıcısını sıfırlar ve bekleyen etkinlikler varsa boşta kalma zaman aşımı gerçekleşmez. Başka bir deyişle, beklenmedik kesinti olmadığı varsayıldığında uzantı hizmeti çalışanları artık etkinlikleri etkin bir şekilde işlediği sürece genellikle aktif kalmaya devam edecektir. Ayrıca, chrome.storage.local.get()
gibi uzantıya özgü Chrome API'lerine yapılan çağrılar boşta kalma zaman aşımını sıfırlar. Özellikle:
- 30 saniye boyunca hiçbir işlem yapılmazsa hizmet çalışanı feshedilir. (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ürerse hizmet çalışanı sonlandırılır.
Yerel mesajlaşma gibi bazı API'ler, bu zamanlayıcıların her ikisini de iptal eden güçlü bir canlı tutma sağlar.
Uzantı hizmeti çalışanlarının uzun süreli işleri durdurmadan mümkün olduğunda sonlandırılmasını sağlamak için çalışmaya devam ediyoruz. Kaynak duyarlı uzantı hizmeti çalışanları, mümkün olduğunda her zaman getiri elde etmelidir. Ayrıca uzantılar, durumunu sürdürerek beklenmedik bir şekilde sonlanmaya hazırlanmalıdır. Bu, tarayıcının kullanıcı tarafından zorla kapatılması gibi öngörülemeyen durumlara karşı koruma sağlar.
Fotoğraf: Paula Guerreiro'nun Unsplash üzerinde