पब्लिश किया गया: 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 में मौजूद किसी समस्या की शिकायत करें.