Daha uzun ömürlü paylaşılan çalışanlar kaynak denemesi

Yayınlanma tarihi: 31 Temmuz 2025

Chrome 139'dan itibaren uzatılmış ömürlü paylaşılan çalışanlar için yeni bir kaynak denemesine katılın. Deneme sürümünde, paylaşılan çalışanların son doküman kaldırıldıktan sonra da çalışmaya devam etmesini sağlayan yeni bir extendedLifetime: true seçeneği bulunur.

Uzatılmış kullanım ömrü özelliğinin kullanım alanı

Birçok site, kullanıcı sayfadan ayrılırken bazı işlemler yapmak ister. Örneğin, durumu kaydetmek veya analizleri kaydetmek için depolamaya yazma ya da sunuculara veri geri gönderme.

Web platformu, daha basit bazı kullanım alanlarıyla ilgilenmek için birkaç API sağlar ancak her birinin sınırlamaları vardır:

  • localStorage yazma işlemleri gibi senkron JavaScript API'leri, mevcut sayfa kaldırılmadan önce tamamlanacak şekilde çalıştırılır.
  • fetch API, keepalive ve daha yakın zamanda fetchLater gibi, isteklerin belge kaldırıldıktan sonra kısa bir süre daha devam etmesini sağlayan çeşitli seçeneklere sahiptir.

Ancak bunlar, son fetch isteği hariç yalnızca senkronize çalışmaları kapsar. Karma oluşturmak veya şifrelemek için IndexedDB, Compression Streams veya Web Crypto gibi eşzamansız API'lerin kullanılmasına izin vermezler. Birçok API, özellikle daha yeni olanlar, ana iş parçacığını engellememek için eşzamansızdır. Bu nedenle, bu API'lerin unload üzerinde kullanılamaması kısıtlayıcıdır.

Alternatif olarak, tek tek sayfa yaşam döngülerinin dışında yaşayan hizmet çalışanlarını kullanabilirsiniz. Ancak bu, geliştiriciler için daha karmaşık yaşam döngüsü ve yönetim gereksinimlerinin yanı sıra kullanıcılar için ek işlem ve bellek gereksinimleri olan oldukça ağır bir çözümdür. Ayrıca, hizmet çalışanlarının ana kullanım alanıyla (ağ istekleri için proxy görevi görme) de eşleşmez. Tam hizmet çalışanlarını yalnızca sayfa yüklemesi kaldırılırken bazı işleri tamamlamak için kullanmak gereksizdir.

Önerilen çözüm

SharedWorker API, işi ana iş parçacığından boşaltmak için kullanılan daha hafif bir API'dir. Ancak şu anda kaynağın kullanım ömrünü (kaynağın son sayfası kaldırıldığında) aşmıyorlar. Chrome, paylaşılan çalışanların belge yok edilmesinden sonra kısa bir süre daha çalışmaya devam etmesine olanak tanımak için SharedWorker API'ye yeni bir seçenek eklemeyi öneriyor.

HTML Standardı, aynı kaynaklı sayfalar arasında gezinirken paylaşılan çalışanın kapatılıp yeniden oluşturulmaması için uygulamaların, belge kaldırıldıktan sonra paylaşılan çalışanları kısa bir süre boyunca canlı tutmasını zaten teşvik etmektedir. Genişletilmiş yaşam süresi önerisi, kullanıcının aynı kaynaklı bir hedefe gitmese bile kullanıcı aracısının, eşzamansız çalışmanın tamamlanabilmesi için paylaşılan çalışanı bir süre daha etkin tutmasını önererek bu süreyi uzatır.

Öneriye göre, paylaşılan çalışanların son belge kaldırıldıktan sonra da çalışmaya devam etmesine izin verilecek. Bu süre, sunucu çalışanlarının boşta kalmasına izin verilen süreyle aynı olacak (Chrome'da 30 saniye). Paylaşılan çalışanlar için bunun boşta kalma süresi değil, boşaltma işleminden sonraki maksimum kullanım ömrü olduğunu unutmayın. Yani 30 saniyelik sınır, boşta kalma süresinden değil, kaldırma işleminden itibaren başlar. Bu süre içinde başlatılan ancak henüz tamamlanmamış çalışmalar iptal edilir.

Uzatılmış kullanım ömrünü etkinleştirme

Bu özellik, uzun ömürlü paylaşılan çalışanlar için kaynak denemesine kaydolarak sitelerde kullanıcılar için etkinleştirilebilir. Alternatif olarak geliştiriciler, chrome://flags/#enable-experimental-web-platform-features işaretini kullanarak kendi tarayıcılarında etkinleştirebilir.

Örnek kod

Denemeye veya özellik işaretine kaydolduktan sonra, uzatılmış kullanım ömrünü aşağıdaki şekilde etkinleştirin:

const myWorker = new SharedWorker("worker.js", { extendedLifetime: true });

Paylaşılan çalışanlar blob'ları da desteklediğinden bu özellik ayrı bir komut dosyası olmadan da etkinleştirilebilir. Örneğin, IndexedDb'ye veri yazmak için:

const sharedWorkerScript = `
  const transaction = db.transaction("analytics", "readwrite");
  const store = transaction.objectStore("analytics");
  const request = store.get("visitCount");
  request.onsuccess = (event) => {
    const newCount = (event.target.result || 0) + 1;
    store.put(newCount, "visitCount");
  };
`;

document.addEventListener("pagehide", () => {
  const blob = new Blob([sharedWorkerScript], { type: "text/javascript" });
  const blobURL = URL.createObjectURL(blob);
  new SharedWorker(blobURL, { extendedLifetime: true });
});

Ayrıca, https://sharedworker-extendedlifetime.netlify.app/ adresinde bir örnek uygulamamız da var. Sayfa yeniden yüklendiğinde (veya 30 saniye içinde kapatılıp yeniden açıldığında) önceki hesaplama kullanılmaya devam eder.

Paylaşılan çalışanlar, chrome://inspect/#workers adresindeki bir site için görüntülenebilir. Bu özellik, kısa süre içinde extendedLifetime seçeneğinin kullanılıp kullanılmadığını gösterecek şekilde geliştirilecektir. Uzun ömürlü paylaşılan çalışanlar, sayfa kaldırıldıktan sonra 30 saniye boyunca bu sayfada gösterilmeye devam eder.

Görüşlerinizi paylaşın

Genişletilmiş ömürlü paylaşılan çalışan kaynak denemesi hakkındaki geri bildiriminizi sabırsızlıkla bekliyoruz.

API şekli GitHub'da tartışılıyor ve daha ayrıntılı bir teknik açıklama sunuyoruz.

Chrome'un uygulamasıyla ilgili geri bildirim için Chromium hatası bildirin.