Daha uzun uzatma hizmet çalışanı ömürleri

Uzantı hizmet çalışanları artık etkinlik aldıkları sürece etkin kalabilir. Bu, uzantı hizmetleri çalışanlarının güvenilirliğini artırır ancak kaçınmanız gereken bir tuzağı vardır.

Joe Medley
Joe Medley

Chrome 110'dan itibaren (7 Şubat 2023 itibarıyla beta sürümünde) uzantı hizmet işçileri, etkinlik aldıkları sürece etkin kalır. Bu düzeltmeyle, uzantı hizmet işçilerinin önceki uygulamasında yaşanan bir zamanlama sorunu giderilmiştir. Etkinlik kuyruğunda yeni etkinlikler olduğunda zaman aşımlarının gerçekleşmesi ve zaman aşımlarının, eşzamansız çalışmayı kısaltması mümkündü. Bu iyileştirmeyle, uzantı hizmeti çalışanları için beş dakikalık maksimum etkin kalma süresi kaldırıldı.

Bu makalede, bu davranışların nasıl değiştiği açıklanmaktadır.

Arka plan

Uzantı hizmet çalışanları çoğunlukla web hizmet çalışanları gibi davranır ancak hizmet çalışanı etkinliklerine ek olarak uzantı etkinliklerini de dinleyebilir. Normal hizmet çalışanı etkinlikleri, hizmet çalışanının ömrünü uzatsa da 110 sürümü yayınlanmadan önce yalnızca birkaç uzantı platform etkinliği, uzantı hizmet çalışanını canlı tutuyordu.

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

  • Hizmet çalışanı otuz saniyeden uzun süredir bir etkinlik almamışsa ve devam eden uzun süreli görev yoksa. Bu süre zarfında bir hizmet çalışanı etkinlik alırsa boşta kalma zamanlayıcısı kaldırılır.
  • Uzun süredir çalışan bir görevin tamamlanması beş dakikadan uzun sürdü ve son otuz saniye içinde hiçbir etkinlik alınmadı.

Boş zamanlayıcı veya uzun süre çalışan görev zamanlayıcının süresi 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 işçisini uyandırabilir ve etkinlik tamamlanana kadar etkin durumda tutabilir ancak otuz saniyelik boşta kalma zamanlayıcısını uzatamaz. Bu durum, tarayıcı uzantıya yeni bir etkinlik göndermiş olsa bile son uzantı etkinliği tamamlandıktan sonra uzantı hizmet işçilerinin dilediğiniz zaman sonlandırılabileceği anlamına geliyordu.

Neler değişti?

Chrome 110'dan 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. Diğer bir deyişle, beklenmedik kesintiler olmadığı sürece uzantı hizmet işçileri, etkin bir şekilde etkinlik işledikleri sürece genellikle etkin kalır. Ayrıca, chrome.storage.local.get() gibi uzantıya özgü Chrome API'lerine yapılan çağrılar da boşta kalma zaman aşımını sıfırlar. Özellikle:

  • Hizmet çalışanı, 30 saniye boyunca işlem yapılmadığında sonlandırılır. (Bir etkinlik aldığında veya uzantı API'sini çağırdığında bu zamanlayıcı sıfırlanır.)
  • Bir 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.

Yerleşik mesajlaşma gibi bazı API'ler, bu zamanlayıcıların ikisini de iptal eden güçlü bir keep-alive sağlar.

Mümkün olduğunda, uzun süredir çalışan işleri kapatmadan uzantı hizmet işçilerinin sonlandırılmasını sağlamak için çalışmalarımıza devam ediyoruz. Kaynak tasarrufu sağlayan uzantı hizmet işçileri, mümkün olduğunda her zaman yol vermelidir. Ayrıca uzantılar, durumu sürdürerek beklenmedik sonlandırmalara hazırlanmalıdır. Bu, tarayıcının kullanıcı tarafından zorla kapatılması gibi öngörülemeyen olaylara karşı koruma sağlar.

Fotoğraf: Paula Guerreiro, Unsplash