पब्लिश किया गया: 31 जुलाई, 2025
Chrome 139 से, एक्सटेंडेड लाइफ़टाइम शेयर किए गए वर्कर के लिए, नई ऑरिजिन ट्रायल में हिस्सा लें. मुफ़्त में आज़माने की सुविधा के तहत, एक नया extendedLifetime: true विकल्प जोड़ा गया है. इससे शेयर किए गए वर्कर, दस्तावेज़ को आखिरी बार अनलोड करने के बाद भी लाइव बने रह सकते हैं.
लंबे समय तक बैकग्राउंड में चलाने की सुविधा का इस्तेमाल करने का तरीका
कई साइटें, उपयोगकर्ता के पेज से हटने पर कुछ काम करना चाहती हैं. उदाहरण के लिए, स्थिति को सेव करने या आंकड़ों को रिकॉर्ड करने के लिए, स्टोरेज में लिखना या सर्वर पर डेटा वापस भेजना.
वेब प्लैटफ़ॉर्म, इस्तेमाल के कुछ सामान्य उदाहरणों के लिए कुछ एपीआई उपलब्ध कराता है. हालांकि, हर एपीआई की कुछ सीमाएं हैं:
- सिंक्रोनस JavaScript API, जैसे कि
localStorageराइट, मौजूदा पेज को अनलोड करने से पहले पूरे किए जाते हैं. fetch APIमें कई विकल्प होते हैं, जैसे किkeepalive. इसके अलावा, हाल ही मेंfetchLaterको भी जोड़ा गया है. इनकी मदद से, दस्तावेज़ को अनलोड करने के बाद भी कुछ समय तक अनुरोध भेजे जा सकते हैं.
हालांकि, इनमें सिर्फ़ सिंक्रोनस तरीके से किए जाने वाले काम शामिल होते हैं. इनमें सिर्फ़ आखिरी fetch अनुरोध शामिल नहीं होता. ये हैश करने या एन्क्रिप्ट (सुरक्षित) करने के लिए, IndexedDB, Compression Streams या Web Crypto जैसे एसिंक्रोनस एपीआई के इस्तेमाल की अनुमति नहीं देते. कई एपीआई, खास तौर पर नए एपीआई, एसिंक्रोनस होते हैं. ऐसा इसलिए, ताकि मुख्य थ्रेड को ब्लॉक न किया जा सके. इसलिए, अनलोड पर इन एपीआई का इस्तेमाल न कर पाना एक पाबंदी है.
इसके बजाय, सर्विस वर्कर का इस्तेमाल किया जा सकता है. ये अलग-अलग पेज के लाइफ़साइकल से बाहर होते हैं. हालांकि, यह एक मुश्किल समाधान है. इसमें डेवलपर के लिए, लाइफ़साइकल और मैनेजमेंट से जुड़ी ज़्यादा जटिल शर्तें होती हैं. इसके अलावा, उपयोगकर्ताओं के लिए प्रोसेस और मेमोरी से जुड़ी अतिरिक्त शर्तें भी होती हैं. यह सर्विस वर्कर के मुख्य इस्तेमाल के उदाहरण से भी मेल नहीं खाता. सर्विस वर्कर का मुख्य इस्तेमाल, नेटवर्क अनुरोधों के लिए प्रॉक्सी के तौर पर काम करना है. पेज अनलोड होने पर कुछ काम पूरा करने के लिए, सिर्फ़ फ़ुल सर्विस वर्कर का इस्तेमाल करना बहुत ज़्यादा लगता है.
सुझाया गया समाधान
SharedWorker API एक हल्का एपीआई है. इसका इस्तेमाल, मुख्य थ्रेड से काम को ऑफ़लोड करने के लिए किया जाता है. हालांकि, फ़िलहाल ये कुकी, ऑरिजिन के लाइफ़टाइम से ज़्यादा समय तक सेव नहीं रहती हैं. ऑरिजिन का लाइफ़टाइम तब खत्म होता है, जब उस ऑरिजिन का आखिरी पेज अनलोड हो जाता है. Chrome, SharedWorker API में एक नया विकल्प जोड़ने का सुझाव दे रहा है. इससे शेयर किए गए वर्कर, दस्तावेज़ के बंद होने के बाद भी कुछ समय तक काम कर पाएंगे.
एचटीएमएल स्टैंडर्ड पहले से ही, शेयर किए गए वर्कर को दस्तावेज़ अनलोड होने के बाद कुछ समय तक चालू रखने के लिए कहता है. इससे, एक ही ऑरिजिन वाले पेजों के बीच नेविगेट करने पर, शेयर किए गए वर्कर को बंद करके फिर से चालू नहीं करना पड़ता. लाइफ़टाइम बढ़ाने का सुझाव देने वाला प्रस्ताव, इस अवधि को बढ़ाने का सुझाव देता है. इसमें कहा गया है कि भले ही उपयोगकर्ता एक ही ऑरिजिन वाले डेस्टिनेशन पर नेविगेट न कर रहा हो, लेकिन उपयोगकर्ता एजेंट को कुछ समय के लिए शेयर किए गए वर्कर को चालू रखना चाहिए, ताकि एसिंक काम पूरा किया जा सके.
प्रस्ताव यह है कि शेयर किए गए वर्कर को आखिरी दस्तावेज़ अनलोड होने के बाद भी चालू रहने की अनुमति दी जाए. ऐसा सर्वर वर्कर के लिए तय की गई समयावधि तक किया जा सकता है. Chrome के लिए, यह समयावधि 30 सेकंड है. ध्यान दें कि शेयर किए गए वर्कर के लिए, यह अनलोड होने के बाद ज़्यादा से ज़्यादा लाइफ़टाइम होता है. यह निष्क्रिय समय नहीं होता. इसका मतलब है कि 30 सेकंड की सीमा, आइडल टाइम से नहीं, बल्कि अनलोड से शुरू होती है. अगर कोई काम शुरू हो गया है और तय समयसीमा के अंदर पूरा नहीं हुआ है, तो उसे रद्द कर दिया जाएगा.
बैटरी की लंबी उम्र वाली सुविधा चालू करना
इस सुविधा को साइटों पर उपयोगकर्ताओं के लिए चालू किया जा सकता है. इसके लिए, एक्सटेंडेड लाइफ़टाइम शेयर किए गए वर्कर के लिए ऑरिजिन ट्रायल में रजिस्टर करना होगा. इसके अलावा, डेवलपर chrome://flags/#enable-experimental-web-platform-features फ़्लैग का इस्तेमाल करके, अपने ब्राउज़र के लिए इसे चालू कर सकते हैं.
कोड का उदाहरण
ट्रायल या फ़ीचर फ़्लैग के लिए ऑप्ट इन करने के बाद, ज़्यादा समय तक चलने वाली कुकी को इस तरह चालू करें:
const myWorker = new SharedWorker("worker.js", { extendedLifetime: true });
शेयर किए गए वर्कर, ब्लॉब के साथ भी काम करते हैं. इसलिए, इसे अलग स्क्रिप्ट के बिना भी चालू किया जा सकता है. उदाहरण के लिए, 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 });
});
यहां हमारे पास एक उदाहरण ऐप्लिकेशन भी है: https://sharedworker-extendedlifetime.netlify.app/. जब पेज को फिर से लोड किया जाता है या 30 सेकंड के अंदर बंद करके फिर से खोला जाता है, तब भी पिछली गिनती उपलब्ध होती है.
शेयर किए गए वर्कर को किसी साइट पर यहां देखा जा सकता है: chrome://inspect/#workers. इसे जल्द ही बेहतर बनाया जाएगा, ताकि यह पता चल सके कि extendedLifetime विकल्प का इस्तेमाल किया गया था या नहीं. लंबे समय तक चलने वाले शेयर किए गए वर्कर भी, पेज अनलोड होने के बाद 30 सेकंड तक इस पेज पर दिखते रहेंगे.
सुझाव/राय दें या शिकायत करें
हमें शेयर किए गए वर्कर की ओरिजिन ट्रायल की बढ़ी हुई अवधि के बारे में आपके सुझाव/राय/शिकायत का इंतज़ार रहेगा.
एपीआई के बारे में GitHub पर चर्चा की जा रही है. साथ ही, हमारे पास ज़्यादा जानकारी वाली तकनीकी जानकारी भी है.
Chrome में लागू किए गए बदलावों के बारे में सुझाव/राय देने या शिकायत करने के लिए, Chromium में बग की शिकायत करें.