Uji coba origin pekerja bersama dengan masa aktif yang lebih lama

Dipublikasikan: 31 Juli 2025

Mulai Chrome 139, berpartisipasilah dalam uji coba origin baru untuk pekerja bersama dengan masa aktif yang diperpanjang. Uji coba menambahkan opsi extendedLifetime: true baru untuk memungkinkan pekerja bersama tetap aktif setelah dokumen terakhir dibatalkan pemuatannya.

Kasus penggunaan untuk fitur masa pakai yang diperpanjang

Banyak situs ingin melakukan beberapa tugas saat pengguna keluar dari halaman. Misalnya, menulis ke penyimpanan, atau mengirim data kembali ke server, untuk menyimpan status atau merekam analisis.

Platform web menyediakan beberapa API untuk menangani beberapa kasus penggunaan yang lebih sederhana, tetapi masing-masing memiliki batasan:

  • API JavaScript sinkron, seperti penulisan localStorage, dijalankan hingga selesai sebelum membatalkan pemuatan halaman saat ini.
  • fetch API memiliki sejumlah opsi seperti keepalive, dan yang terbaru fetchLater, yang memungkinkan permintaan pengiriman tetap ada setelah pembatalan pemuatan dokumen untuk jangka waktu singkat.

Namun, ini hanya mencakup pekerjaan sinkron kecuali untuk permintaan fetch terakhir. Worker ini tidak mengizinkan penggunaan API asinkron seperti IndexedDB, Compression Streams, atau Web Crypto untuk membuat hash atau mengenkripsi. Banyak API, terutama API yang lebih baru, bersifat asinkron untuk menghindari pemblokiran thread utama, sehingga tidak dapat menggunakan API ini saat pelepasan muatan bersifat membatasi.

Alternatifnya adalah menggunakan pekerja layanan, yang berada di luar siklus proses halaman individual. Namun, ini adalah solusi yang cukup berat, dengan persyaratan siklus proses dan pengelolaan yang lebih kompleks bagi developer, belum lagi persyaratan proses dan memori tambahan bagi pengguna. Hal ini juga tidak sesuai dengan kasus penggunaan utama pekerja layanan (untuk bertindak sebagai proxy untuk permintaan jaringan). Menggunakan pekerja layanan penuh hanya untuk kasus penggunaan penyelesaian beberapa pekerjaan saat halaman dibongkar tampaknya berlebihan.

Solusi yang diusulkan

SharedWorker API adalah API yang lebih ringan yang digunakan untuk mengalihkan pekerjaan dari thread utama. Namun, saat ini, mereka tidak bertahan di luar masa aktif origin (saat halaman terakhir untuk origin tersebut dibatalkan pemuatannya). Chrome mengusulkan penambahan opsi baru ke SharedWorker API agar pekerja bersama dapat bertahan setelah penghancuran dokumen selama jangka waktu singkat.

Standar HTML sudah mendorong penerapan untuk menjaga agar shared worker tetap aktif selama beberapa saat setelah pembongkaran dokumen, sehingga navigasi antar-halaman dengan origin yang sama tidak membongkar lalu membuat ulang shared worker. Proposal masa aktif yang diperpanjang hanya memperpanjangnya dengan menyarankan bahwa, meskipun pengguna tidak menavigasi ke tujuan yang sama asalnya, agen pengguna harus menjaga agar pekerja bersama tetap aktif selama beberapa waktu, sehingga pekerjaan asinkron dapat diselesaikan.

Usulannya adalah mengizinkan pekerja bersama tetap aktif setelah pembongkaran dokumen terakhir, selama waktu yang sama dengan waktu yang diizinkan bagi pekerja server untuk tetap tidak aktif—yaitu 30 detik untuk Chrome. Perhatikan bahwa untuk pekerja bersama, ini adalah masa aktif maksimum setelah pelepasan, bukan waktu tidak ada aktivitas. Artinya, batas 30 detik dimulai dari pelepasan, bukan dari waktu tidak ada aktivitas. Pekerjaan yang telah dimulai dan belum selesai dalam jangka waktu tersebut akan dibatalkan.

Mengaktifkan masa pakai yang diperpanjang

Fitur ini dapat diaktifkan di situs untuk pengguna dengan mendaftar ke uji coba origin untuk pekerja bersama dengan masa aktif yang diperpanjang. Atau, developer dapat mengaktifkannya untuk browser mereka sendiri menggunakan tanda chrome://flags/#enable-experimental-web-platform-features.

Kode contoh

Setelah memilih untuk ikut serta dalam uji coba atau flag fitur, aktifkan masa aktif yang diperpanjang sebagai berikut:

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

Karena pekerja bersama juga mendukung blob, hal ini juga dapat diaktifkan tanpa skrip terpisah. Misalnya, untuk menulis data ke IndexedDb:

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 });
});

Kami juga memiliki aplikasi contoh di sini: https://sharedworker-extendedlifetime.netlify.app/. Saat halaman dimuat ulang (atau ditutup dan dibuka kembali dalam waktu 30 detik), penghitungan sebelumnya masih tersedia.

Pekerja bersama dapat dilihat untuk situs di: chrome://inspect/#workers dan fitur ini akan segera ditingkatkan untuk menunjukkan apakah opsi extendedLifetime digunakan. Shared worker dengan masa aktif yang diperpanjang juga akan terus ditampilkan di halaman ini selama 30 detik setelah halaman dibatalkan pemuatannya.

Beri masukan

Kami menantikan masukan Anda tentang jalur asal pekerja bersama dengan masa aktif yang diperpanjang.

Struktur API sedang dibahas di GitHub dan kami memiliki penjelasan teknis yang lebih mendetail.

Untuk memberikan masukan tentang penerapan Chrome, laporkan bug Chromium.