अनलोड इवेंट को रोका जा रहा है

unload इवेंट को धीरे-धीरे बंद कर दिया जाएगा. इसके लिए, डिफ़ॉल्ट तौर पर लागू होने वाले unload इवेंट को धीरे-धीरे बदला जाएगा. इससे, unload हैंडलर पेजों पर तब तक ट्रिगर नहीं होंगे, जब तक कोई पेज उन्हें फिर से चालू करने के लिए साफ़ तौर पर ऑप्ट इन नहीं करता.

बंद होने की टाइमलाइन

हमने जनवरी 2019 में ही यह एलान किया था कि बैक/फ़ॉरवर्ड कैश मेमोरी लागू करने का हमारा मकसद है. इसलिए, हमने यह भी बताया था कि पेज अनलोड होने के तरीके में बदलाव हो सकते हैं. इस सुविधा को लागू करने के साथ-साथ, हमने बड़े पैमाने पर लोगों तक पहुंचने की कोशिश की. इसकी वजह से, अनलोड किए जाने वाले डेटा के इस्तेमाल में काफ़ी गिरावट आई. इस आउटरीच के साथ-साथ, हमने Chrome 115 से अनलोड करने की सुविधा को बंद करने के असर की जांच करने के तरीके भी उपलब्ध कराए हैं:

इस तरह के आउटरीच और ट्रायल के बाद, हमें उम्मीद है कि धीरे-धीरे बंद होने की सुविधा इस तरह से रोल आउट होगी:

  • यह एक ऐसा फ़ेज़ है जिसमें 50 सबसे लोकप्रिय साइटों के लिए, अनलोड करने की सुविधा धीरे-धीरे बंद हो जाएगी. यह जानकारी, लेख लिखने के समय के रेफ़रंस के तौर पर दी गई है.
    • यह सुविधा, Chrome 120 (नवंबर 2023 के आखिर में) के 1% उपयोगकर्ताओं के लिए शुरू की जाएगी.
    • साल 2024 की तीसरी तिमाही के आखिर तक, सभी उपयोगकर्ताओं के लिए बंद कर दिया जाएगा
  • इसके अलावा, साल 2024 की तीसरी तिमाही से, हम एक सामान्य फ़ेज़ शुरू करने जा रहे हैं. इसमें, किसी भी साइट पर धीरे-धीरे अनलोड की सुविधा बंद हो जाएगी. यह सुविधा, साल 2025 की पहली तिमाही के आखिर तक 100% उपयोगकर्ताओं के लिए बंद हो जाएगी. हालांकि, शुरुआत में यह सुविधा 1% उपयोगकर्ताओं के लिए बंद होगी.

ध्यान दें कि अगर इस सुविधा के बंद होने की समयसीमा के दौरान, अनलोड करने की सुविधा से माइग्रेट करने के लिए ज़रूरत के मुताबिक समय नहीं मिलता है, तो हम ऑप्ट-आउट करने के विकल्पों का मेन्यू भी उपलब्ध कराते हैं. हमारा मकसद, इस सॉफ्ट डिप्रेशन का इस्तेमाल करके, आखिरी चरण (अनलोड की सुविधा को बंद करना) की टाइमलाइन के बारे में बताना है. इस चरण में, इन ऑप्ट-आउट को हटाया या कम किया जाएगा.

अनलोड करने की सुविधा बंद होने की टाइमलाइन.

बैकग्राउंड

unload को दस्तावेज़ को अनलोड करते समय ट्रिगर करने के लिए डिज़ाइन किया गया था. सिद्धांत रूप से, इसका इस्तेमाल किसी भी समय कोड चलाने के लिए किया जा सकता है. ऐसा तब किया जाता है, जब उपयोगकर्ता किसी पेज से किसी दूसरे पेज पर जाता है या सेशन खत्म होने पर कॉलबैक के तौर पर.

इस इवेंट का सबसे ज़्यादा इस्तेमाल इन स्थितियों में किया गया था:

  • उपयोगकर्ता का डेटा सेव करना: पेज से जाने से पहले डेटा सेव करें.
  • क्लीनअप टास्क करना: पेज छोड़ने से पहले, खुले हुए संसाधनों को बंद करना.
  • आंकड़े भेजना: सेशन के आखिर में, उपयोगकर्ता के इंटरैक्शन से जुड़ा डेटा भेजना.

हालांकि, unload इवेंट काफ़ी भरोसेमंद नहीं है.

डेस्कटॉप पर Chrome और Firefox में, unload काफ़ी भरोसेमंद है. हालांकि, bfcache (बैक/फ़ॉरवर्ड कैश) के इस्तेमाल को रोकने से, साइट की परफ़ॉर्मेंस पर इसका बुरा असर पड़ता है.

मोबाइल ब्राउज़र पर unload अक्सर काम नहीं करता, क्योंकि टैब अक्सर बैकग्राउंड में भेजे जाते हैं और फिर बंद कर दिए जाते हैं. इस वजह से, ब्राउज़र मोबाइल पर unload के बजाय bfcache को प्राथमिकता देते हैं. इससे, उन्हें और भी भरोसेमंद नहीं माना जाता. Safari, डेस्कटॉप पर भी इस व्यवहार का इस्तेमाल करता है.

Chrome की टीम का मानना है कि डेस्कटॉप पर unload के बजाय bfcache को प्राथमिकता देने वाले मोबाइल मॉडल का इस्तेमाल करने से, काम करने में रुकावट आ सकती है. ऐसा इसलिए, क्योंकि इससे डेस्कटॉप पर भी bfcache का इस्तेमाल करना ज़्यादा मुश्किल हो जाएगा. हालांकि, पहले Chrome (और Firefox) में यह सुविधा काफ़ी भरोसेमंद थी. इसके बजाय, Chrome का मकसद unload इवेंट को पूरी तरह से हटाना है. हालांकि, तब तक यह सुविधा उन लोगों के लिए डेस्कटॉप पर काम करती रहेगी जिन्होंने साफ़ तौर पर इस सुविधा के बंद होने की सुविधा से ऑप्ट-आउट किया है.

unload इवेंट को बंद क्यों किया जा रहा है?

unload को बंद करना, वेब को बेहतर बनाने के लिए एक अहम कदम है. unload इवेंट से, ऐप्लिकेशन के लाइफ़साइकल को कंट्रोल करने का गलत एहसास होता है. यह एहसास, आधुनिक कंप्यूटिंग की दुनिया में वेब को ब्राउज़ करने के तरीके से मेल नहीं खाता.

मोबाइल ऑपरेटिंग सिस्टम, मेमोरी बचाने के लिए अक्सर वेब पेजों को फ़्रीज़ या अनलोड करते हैं. डेस्कटॉप ब्राउज़र भी अब इसी वजह से ऐसा ज़्यादा से ज़्यादा कर रहे हैं. ऑपरेटिंग सिस्टम के हस्तक्षेप के बिना भी, उपयोगकर्ता अक्सर टैब स्विच करते हैं और "पेजों को छोड़े बिना" पुराने टैब बंद कर देते हैं.

unload इवेंट को 'अब काम नहीं करता' के तौर पर हटाने का मतलब है कि वेब डेवलपर के तौर पर, हमें यह पक्का करना होगा कि हमारा पैराडाइम असल दुनिया से मेल खाता हो. साथ ही, हम पुराने कॉन्सेप्ट पर निर्भर न रहें, भले ही वे कभी काम के रहे हों.

unload इवेंट के विकल्प

हमारा सुझाव है कि unload के बजाय, इनका इस्तेमाल करें:

  • visibilitychange: यह तय करने के लिए कि किसी पेज के दिखने की सेटिंग कब बदली गई. यह इवेंट तब होता है, जब उपयोगकर्ता टैब स्विच करता है, ब्राउज़र विंडो को छोटा करता है या नया पेज खोलता है. ऐप्लिकेशन और उपयोगकर्ता का डेटा सेव करने के लिए, hidden की स्थिति को सबसे भरोसेमंद समय मानें.
  • pagehide: यह तय करने के लिए कि उपयोगकर्ता ने पेज से कब विज़िट छोड़ी. यह इवेंट तब होता है, जब उपयोगकर्ता किसी पेज से बाहर निकलता है, पेज को फिर से लोड करता है या ब्राउज़र विंडो बंद करता है. जब पेज को छोटा किया जाता है या किसी दूसरे टैब पर स्विच किया जाता है, तो pagehide इवेंट ट्रिगर नहीं होता. ध्यान दें कि pagehide इवेंट होने पर, पेज को बैक/फ़ॉरवर्ड कैश मेमोरी में सेव नहीं किया जाता. इसलिए, हो सकता है कि इस इवेंट के होने के बाद, पेज को वापस लाया जाए. अगर इस इवेंट में किसी संसाधन को हटाया जा रहा है, तो हो सकता है कि पेज को वापस लाने पर उन्हें वापस लाया जाए.

beforeunload इवेंट का इस्तेमाल करने का तरीका, unload से थोड़ा अलग है. इस इवेंट को रद्द किया जा सकता है. इसका इस्तेमाल, किसी पेज से दूसरे पेज पर जाने पर, सेव नहीं किए गए बदलावों के बारे में उपयोगकर्ताओं को चेतावनी देने के लिए किया जाता है. इस इवेंट पर भी भरोसा नहीं किया जा सकता, क्योंकि बैकग्राउंड में चल रहे टैब को बंद करने पर यह इवेंट ट्रिगर नहीं होगा. हमारा सुझाव है कि beforeunload का इस्तेमाल सीमित तौर पर करें और इसे सिर्फ़ शर्तों के साथ जोड़ें. इसके बजाय, ज़्यादातर unload बदलावों के लिए ऊपर दिए गए इवेंट का इस्तेमाल करें.

ज़्यादा जानकारी के लिए, unload हैंडलर का कभी भी इस्तेमाल न करने के बारे में यह सलाह देखें.

unload के इस्तेमाल का पता लगाना

पेजों पर unload इवेंट के दिखने की जानकारी पाने के लिए, अलग-अलग टूल उपलब्ध हैं. इससे साइटों को यह पता चलता है कि वे अपने कोड या लाइब्रेरी के ज़रिए इस इवेंट का इस्तेमाल कर रही हैं या नहीं. साथ ही, यह भी पता चलता है कि इस इवेंट के बंद होने से उन पर क्या असर पड़ सकता है.

Chrome DevTools

Chrome DevTools में back-forward-cache ऑडिट की सुविधा शामिल है. इसकी मदद से, उन समस्याओं की पहचान की जा सकती है जिनकी वजह से आपके पेज को बैक/फ़ॉरवर्ड कैश मेमोरी में सेव होने से रोका जा सकता है. इनमें unload हैंडलर का इस्तेमाल भी शामिल है.

बैक/फ़ॉरवर्ड कैश मेमोरी की जांच करने के लिए, यह तरीका अपनाएं:

  1. अपने पेज पर, DevTools खोलें. इसके बाद, ऐप्लिकेशन > बैकग्राउंड सेवाएं > बैक/फ़ॉरवर्ड कैश मेमोरी पर जाएं.

  2. बैक/फ़ॉरवर्ड कैश मेमोरी की जांच करें पर क्लिक करें. ऐसा करने पर, Chrome आपको chrome://terms/ पर ले जाता है और फिर आपके पेज पर वापस लाता है. इसके अलावा, ब्राउज़र के 'वापस जाएं' और 'आगे जाएं' बटन पर भी क्लिक किया जा सकता है.

अगर आपका पेज बैक/फ़ॉरवर्ड कैश मेमोरी की ज़रूरी शर्तें पूरी नहीं करता है, तो बैक/फ़ॉरवर्ड कैश मेमोरी टैब में आपको समस्याओं की सूची दिखेगी. कार्रवाई करने की ज़रूरत है में जाकर, यह देखा जा सकता है कि unload का इस्तेमाल किया जा रहा है या नहीं:

Chrome DevTools के बैक/फ़ॉरवर्ड कैश मेमोरी टेस्टिंग टूल से पता चलता है कि अनलोड हैंडलर का इस्तेमाल किया गया था

रिपोर्टिंग एपीआई

Reporting API का इस्तेमाल, रीड-ओनली अनुमति नीति के साथ किया जा सकता है. इससे, आपकी वेबसाइट के उपयोगकर्ताओं के unload के इस्तेमाल का पता लगाया जा सकता है.

ज़्यादा जानकारी के लिए, अनलोड ढूंढने के लिए Reporting API का इस्तेमाल करना लेख पढ़ें

Bfcache notRestoredReasons API

notRestoredReasons प्रॉपर्टी को PerformanceNavigationTiming क्लास में जोड़ा गया है. इससे यह जानकारी मिलती है कि नेविगेशन पर bfcache का इस्तेमाल करने से दस्तावेज़ों को ब्लॉक किया गया था या नहीं. साथ ही, इसकी वजह भी पता चलती है. इस्तेमाल के निर्देश यहां दिए गए हैं. इस उदाहरण में, किसी मौजूदा unload लिसनर के रिस्पॉन्स ऑब्जेक्ट की चेतावनी कैसी दिखती है, यह बताया गया है:

{
   children: [],
   id: null,
   name: null,
   reasons: [
     {"reason", "unload-handler"}
   ],
   src: null,
   url: "https://www.example.com/page/"
}

unload का ऐक्सेस कंट्रोल करना

Chrome, unload इवेंट को धीरे-धीरे बंद कर देगा. इस बीच, इस व्यवहार को कंट्रोल करने और आने वाले समय में इस सुविधा के बंद होने के लिए तैयारी करने के लिए, अलग-अलग टूल का इस्तेमाल किया जा सकता है. ध्यान रखें कि आपको लंबे समय तक इन तकनीकों पर भरोसा नहीं करना चाहिए. इसके बजाय, आपको जल्द से जल्द इन विकल्पों पर माइग्रेट करने की योजना बनानी चाहिए.

इन विकल्पों की मदद से, unload हैंडलर को चालू या बंद किया जा सकता है. इससे यह पता लगाया जा सकता है कि इनके बिना आपकी साइट कैसे काम करेगी. इससे, आने वाले समय में इन हैंडलर के बंद होने के लिए तैयारी की जा सकती है. नीतियां अलग-अलग तरह की होती हैं:

  • अनुमतियों की नीति: यह साइट के मालिकों के लिए एक प्लैटफ़ॉर्म एपीआई है. इसकी मदद से, एचटीटीपी हेडर का इस्तेमाल करके, साइट या किसी पेज के लेवल पर सुविधाओं के ऐक्सेस को कंट्रोल किया जा सकता है.
  • Enterprise की नीतियां: आईटी एडमिन के लिए, अपने संगठन या कारोबार के लिए Chrome को कॉन्फ़िगर करने वाले टूल. इन्हें Google Admin console जैसे एडमिन पैनल से कॉन्फ़िगर किया जा सकता है.
  • Chrome फ़्लैग: इसकी मदद से, डेवलपर अलग-अलग साइटों पर असर की जांच करने के लिए, unload के बंद होने की सेटिंग में बदलाव कर सकते हैं.

अनुमतियों की नीति

Chrome 115 से, अनुमतियों की नीति जोड़ी गई है. इससे साइटों को unload हैंडलर का इस्तेमाल करने से ऑप्ट-आउट करने की अनुमति मिलती है. साथ ही, साइट की परफ़ॉर्मेंस को बेहतर बनाने के लिए, bfcache का तुरंत फ़ायदा मिलता है. अपनी साइट के लिए इसे सेट करने का तरीका जानने के लिए, ये उदाहरण देखें. इससे साइटों को unload के बंद होने से पहले ही, उससे जुड़ी समस्याओं को हल करने में मदद मिलती है.

Chrome 117 में इस सुविधा को बढ़ाया जाएगा, ताकि साइटें इसका उलटा इस्तेमाल कर सकें. साथ ही, unload हैंडलर को ट्रिगर करने की कोशिश जारी रखने के लिए ऑप्ट-इन कर सकें. ऐसा इसलिए, क्योंकि Chrome इनके लिए डिफ़ॉल्ट रूप से, आने वाले समय में ट्रिगर न होने की सेटिंग लागू करेगा. अपनी साइट के लिए, अनलोड हैंडलर को ट्रिगर करने की अनुमति जारी रखने के तरीके के बारे में ये उदाहरण देखें. यह ऑप्ट-इन हमेशा के लिए नहीं रहेगा. इसका इस्तेमाल, साइटों को unload हैंडलर से माइग्रेट करने के लिए किया जाना चाहिए.

एंटरप्राइज़ नीति

जिन एंटरप्राइज़ के सॉफ़्टवेयर को सही तरीके से काम करने के लिए unload इवेंट की ज़रूरत होती है वे ForcePermissionPolicyUnloadDefaultEnabled नीति का इस्तेमाल करके, अपने कंट्रोल में मौजूद डिवाइसों के लिए इवेंट हैंडलर को धीरे-धीरे बंद होने से रोक सकते हैं. इस नीति को चालू करने पर, unload सभी ऑरिजिन के लिए डिफ़ॉल्ट रूप से चालू रहेगा. हालांकि, पेज चाहे, तो ज़्यादा सख्त नीति सेट कर सकता है. अनुमतियों की नीति से ऑप्ट-आउट करने की सुविधा की तरह, यह भी एक टूल है. इसका इस्तेमाल, ऐप्लिकेशन में होने वाले संभावित बदलावों से होने वाले नुकसान को कम करने के लिए किया जाता है. हालांकि, इसका इस्तेमाल हमेशा नहीं किया जाना चाहिए.

Chrome फ़्लैग और कमांड लाइन स्विच

एंटरप्राइज़ नीति के अलावा, Chrome फ़्लैग और कमांड लाइन स्विच की मदद से, अलग-अलग उपयोगकर्ताओं के लिए, इस सुविधा के बंद होने की सुविधा को बंद किया जा सकता है:

chrome://flags/#deprecate-unload को enabled पर सेट करने से, डिफ़ॉल्ट रूप से 'इस्तेमाल नहीं किया जा रहा' का मैसेज दिखेगा. साथ ही, unload हैंडलर ट्रिगर नहीं होंगे. हालांकि, अनुमतियों की नीति की मदद से, साइट के हिसाब से इन्हें बदला जा सकता है. हालांकि, ये डिफ़ॉल्ट रूप से ट्रिगर होते रहेंगे.

इन सेटिंग को कमांड लाइन स्विच से भी कंट्रोल किया जा सकता है.

विकल्पों की तुलना

यहां दी गई टेबल में, पहले बताए गए विकल्पों के अलग-अलग इस्तेमाल के बारे में खास जानकारी दी गई है:

बंद होने की तारीख को आगे बढ़ाना अपग्रेड की प्रक्रिया को जल्दी पूरा करना (अपवादों के साथ) माइग्रेशन के लिए समय सुरक्षित करने के लिए, प्रॉपर्टी के बंद होने से रोकना
अनुमतियों से जुड़ी नीति
(यह पेजों/साइटों पर लागू होती है)
हां हां हां
एंटरप्राइज़ नीति
(यह डिवाइसों पर लागू होती है)
नहीं नहीं हां
Chrome फ़्लैग
(यह सुविधा हर उपयोगकर्ता के लिए उपलब्ध है)
हां नहीं नहीं
Chrome के कमांड लाइन स्विच
(यह सेटिंग हर उपयोगकर्ता के लिए अलग-अलग हो सकती है)
हां नहीं हां

नतीजा

unload हैंडलर बंद किए जा रहे हैं. ये ट्रिगर, लंबे समय से भरोसेमंद नहीं हैं. साथ ही, इस बात की कोई गारंटी नहीं है कि दस्तावेज़ के नष्ट होने पर, ये ट्रिगर हर बार काम करेंगे. इसके अलावा, unload हैंडलर bfcache के साथ काम नहीं करते.

फ़िलहाल, unload हैंडलर का इस्तेमाल करने वाली साइटों को, आने वाले समय में इनका इस्तेमाल बंद किए जाने के लिए तैयारी करनी चाहिए. इसके लिए, किसी भी मौजूदा unload हैंडलर की जांच करें, उन्हें हटाएं या माइग्रेट करें. अगर ज़्यादा समय चाहिए, तो आखिरी विकल्प के तौर पर, हैंडलर के बंद होने में देरी करें.

आभार

इस लेख की समीक्षा करने में मदद करने के लिए, केंजी बहेक्स, फ़र्गल डाली, अड्रियऩा जारा, और जेरेमी वैगनर का धन्यवाद.

Unsplash पर Anja Bauermann की हीरो इमेज