पेश है NoState प्रीफ़ेच

Katie Hempenius
Katie Hempenius

पब्लिश होने की तारीख: 20 जुलाई, 2018

परिचय

NoState Prefetch, Chrome में उपलब्ध एक नई सुविधा है. यह बंद की जा चुकी prerendering process का विकल्प है. इसका इस्तेमाल <link rel="prerender"> जैसी सुविधाओं को बेहतर बनाने के लिए किया जाता है. प्रीरेंडरिंग की तरह, यह भी रिसॉर्स को पहले से फ़ेच करता है. हालांकि, प्रीरेंडरिंग के उलट, यह JavaScript को पहले से एक्ज़ीक्यूट नहीं करता है. साथ ही, पेज के किसी भी हिस्से को पहले से रेंडर नहीं करता है. NoState Prefetch का मकसद, पेज लोड होने में लगने वाले समय को कम करना है. साथ ही, यह प्रीरेंडरिंग की तुलना में कम मेमोरी का इस्तेमाल करता है.

NoState Prefetch कोई एपीआई नहीं है. यह एक ऐसा तरीका है जिसका इस्तेमाल Chrome, अलग-अलग एपीआई और सुविधाओं को लागू करने के लिए करता है. Resource Hints API और Chrome के पता बार से पेजों को प्रीफ़ेच करने की सुविधा, दोनों को NoState Prefetch का इस्तेमाल करके लागू किया जाता है. अगर Chrome 63 या इसके बाद के वर्शन का इस्तेमाल किया जा रहा है, तो आपका ब्राउज़र पहले से ही <link rel="prerender"> जैसी सुविधाओं के लिए, NoState Prefetch का इस्तेमाल कर रहा है.

इस लेख में बताया गया है कि NoStatePrefetch कैसे काम करता है. साथ ही, इसे लॉन्च करने के पीछे की वजह और Chrome के हिस्टोग्राम का इस्तेमाल करके, इसके इस्तेमाल से जुड़े आंकड़े देखने के निर्देश दिए गए हैं.

वजह

NoState Prefetch को लागू करने की दो मुख्य वजहें थीं:

स्टोरेज का इस्तेमाल कम करना

NoState Prefetch सिर्फ़ ~45MiB मेमोरी का इस्तेमाल करता है. नोस्टेट प्रीफ़ेच के लिए, प्रीलोड स्कैनर को चालू रखना मेमोरी का मुख्य खर्च है. यह खर्च, इस्तेमाल के अलग-अलग उदाहरणों में लगभग एक जैसा रहता है. फ़ेच के साइज़ या वॉल्यूम को बढ़ाने से, NoState Prefetch के इस्तेमाल की गई मेमोरी पर कोई खास असर नहीं पड़ता.

इसके उलट, प्रीरेंडरिंग में आम तौर पर 100 एमबी मेमोरी का इस्तेमाल होता है. साथ ही, मेमोरी इस्तेमाल करने की सीमा 150 एमबी पर सेट होती है. ज़्यादा मेमोरी इस्तेमाल करने की वजह से, यह सुविधा कम रैम (यानी कि <= 512 एमबी रैम) वाले डिवाइसों के लिए सही नहीं है. इस वजह से, Chrome कम कॉन्फ़िगरेशन वाले डिवाइसों पर प्रीरेंडरिंग नहीं करता है. इसके बजाय, वह प्रीकनेक्ट करेगा.

वेब प्लैटफ़ॉर्म की नई सुविधाओं के लिए सहायता उपलब्ध कराना

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

लागू करना

यहां बताया गया है कि NoState Prefetch कैसे काम करता है.

  1. NoStatePrefetch ट्रिगर होता है.

    प्रीरेंडर रिसॉर्स हिंट (यानी कि <link rel="prerender">) और Chrome की कुछ सुविधाएं, NoState Prefetch को ट्रिगर करेंगी. हालांकि, इसके लिए ये दो शर्तें पूरी होनी चाहिए: a) उपयोगकर्ता के पास कम कॉन्फ़िगरेशन वाला डिवाइस न हो और b) उपयोगकर्ता सेल्यूलर नेटवर्क पर न हो.

  2. NoState Prefetch के लिए, एक नया रेंडरर बनाया गया है.

    Chrome में, “रेंडरर” एक ऐसी प्रोसेस होती है जो एचटीएमएल दस्तावेज़ को लेती है, उसे पार्स करती है, उसका रेंडर ट्री बनाती है, और नतीजे को स्क्रीन पर दिखाती है. Chrome में हर टैब के साथ-साथ, NoState Prefetch की हर प्रोसेस का अपना रेंडरर होता है, ताकि उन्हें अलग रखा जा सके. इससे किसी गड़बड़ी (जैसे, टैब क्रैश होना) के असर को कम करने में मदद मिलती है. साथ ही, यह दुर्भावनापूर्ण कोड को अन्य टैब या सिस्टम के अन्य हिस्सों को ऐक्सेस करने से रोकता है.

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

    NoState Prefetch सिर्फ़ GET एचटीटीपी तरीके के साथ काम करता है. यह ऐसे किसी भी सब-संसाधन को फ़ेच नहीं करेगा जिनके लिए, अन्य एचटीटीपी तरीकों का इस्तेमाल करना ज़रूरी है. इसके अलावा, यह ऐसे किसी भी संसाधन को फ़ेच नहीं करेगा जिसके लिए उपयोगकर्ता की कार्रवाइयों की ज़रूरत होती है. जैसे, पुष्टि करने वाले पॉपअप, एसएसएल क्लाइंट सर्टिफ़िकेट या मैन्युअल ओवरराइड.

  4. फ़ेच किए गए सब-रिसोर्स, “IDLE” नेट प्रायॉरिटी के साथ फ़ेच किए जाएंगे.

    “IDLE” नेट प्रायॉरिटी, Chrome में सबसे कम नेट प्रायॉरिटी होती है.

  5. NoState Prefetch की मदद से वापस लाए गए सभी संसाधनों को, उनके कैश हेडर के हिसाब से कैश मेमोरी में सेव किया जाता है.

    NoState Prefetch, no-store Cache-Control हेडर वाले संसाधनों को छोड़कर, सभी संसाधनों को कैश मेमोरी में सेव करेगा. अगर Vary रिस्पॉन्स हेडर, no-cache Cache-Control हेडर मौजूद है या संसाधन पांच मिनट से ज़्यादा पुराना है, तो इस्तेमाल करने से पहले संसाधन की फिर से पुष्टि की जाएगी.

  6. सभी सब-रिसोर्स लोड होने के बाद, रेंडरर बंद हो जाता है.

    अगर सब-रिसोर्स का समय खत्म हो जाता है, तो रेंडरर को 30 सेकंड के बाद बंद कर दिया जाएगा.

  7. ब्राउज़र, कुकी स्टोर और लोकल डीएनएस कैश मेमोरी को अपडेट करने के अलावा, किसी भी स्थिति में बदलाव नहीं करता. इस बात का ध्यान रखना ज़रूरी है, क्योंकि यह “NoState Prefetch” में “NoState” है.

    पेज लोड करने की “सामान्य” प्रोसेस के इस चरण में, ब्राउज़र ऐसे काम करता है जिनसे ब्राउज़र की स्थिति में बदलाव होता है. उदाहरण के लिए, JavaScript को एक्ज़ीक्यूट करना, sessionStorage या localStorage में बदलाव करना, संगीत या वीडियो चलाना, History API का इस्तेमाल करना या उपयोगकर्ता को प्रॉम्प्ट दिखाना. NoState Prefetch में, सिर्फ़ दो तरह के बदलाव होते हैं. पहला, जवाब मिलने पर डीएनएस कैश मेमोरी को अपडेट करना. दूसरा, अगर किसी जवाब में Set-Cookie हेडर शामिल है, तो कुकी स्टोर को अपडेट करना.

  8. जब रिसॉर्स की ज़रूरत होती है, तब उसे ब्राउज़र विंडो में लोड किया जाता है.

    हालांकि, पहले से रेंडर किए गए पेज के उलट, यह पेज तुरंत नहीं दिखेगा. इसे अब भी ब्राउज़र से रेंडर करना होगा. ब्राउज़र, NoState Prefetch के लिए इस्तेमाल किए गए रेंडरर का फिर से इस्तेमाल नहीं करेगा. इसके बजाय, वह एक नए रेंडरर का इस्तेमाल करेगा. पेज को पहले से रेंडर न करने से, NoStatePrefetch की मेमोरी खपत कम हो जाती है. हालांकि, इससे पेज लोड होने में लगने वाले समय पर पड़ने वाला असर भी कम हो जाता है.

    अगर पेज पर कोई सर्विस वर्कर है, तो यह पेज लोड फिर से सर्विस वर्कर से होकर जाएगा.

    अगर पेज लोड होने तक NoState Prefetch, सब-रिसोर्स फ़ेच नहीं कर पाता है, तो ब्राउज़र पेज लोड करने की प्रोसेस को वहीं से जारी रखेगा जहां NoState Prefetch ने छोड़ा था. ब्राउज़र को अब भी रिसोर्स फ़ेच करने होंगे, लेकिन उतने नहीं जितने तब करने पड़ते, जब NoState Prefetch शुरू नहीं किया गया होता.

वेब ऐनलिटिक्स पर असर

NoState Prefetch का इस्तेमाल करके लोड किए गए पेजों को वेब ऐनलिटिक्स टूल, अलग-अलग समय पर रजिस्टर करते हैं. यह इस बात पर निर्भर करता है कि टूल, क्लाइंट-साइड या सर्वर-साइड पर डेटा इकट्ठा करता है या नहीं.

जब उपयोगकर्ता को पेज दिखता है, तब क्लाइंट-साइड Analytics स्क्रिप्ट, पेज व्यू को रजिस्टर करती हैं. ये स्क्रिप्ट, JavaScript के चालू होने पर काम करती हैं. NoState Prefetch, किसी भी JavaScript को चालू नहीं करता.

सर्वर-साइड के आंकड़ों से जुड़े टूल, अनुरोध पूरा होने पर मेट्रिक रजिस्टर करते हैं. NoState Prefetch के ज़रिए लोड किए गए संसाधनों के लिए, अनुरोध को हैंडल किए जाने और क्लाइंट के जवाब का इस्तेमाल करने के बीच काफ़ी समय लग सकता है. हालांकि, ऐसा तब होता है, जब क्लाइंट जवाब का इस्तेमाल करता है. Chrome 69 के बाद से, NoState Prefetch सभी अनुरोधों में Purpose: Prefetch हेडर जोड़ता है, ताकि उन्हें सामान्य ब्राउज़िंग से अलग किया जा सके.

इसे देखें

NoStatePrefetch को दिसंबर 2017 में Chrome 63 में लॉन्च किया गया था. फ़िलहाल, इसका इस्तेमाल इन कामों के लिए किया जाता है:

  • prerender रिसॉर्स हिंट लागू करना
  • Google Search के नतीजों में पहला नतीजा फ़ेच करना
  • उन पेजों को फ़ेच करता है जिनके बारे में Chrome के पता बार को लगता है कि इन्हें अगली बार विज़िट किया जा सकता है

Chrome Internals का इस्तेमाल करके, यह देखा जा सकता है कि आपने NoStatePrefetch का इस्तेमाल कैसे किया है.

NoState Prefetch की मदद से लोड की गई साइटों की सूची देखने के लिए, chrome://net-internals/#prerender पर जाएं.

NoState Prefetch के इस्तेमाल से जुड़े आंकड़े देखने के लिए, chrome://histograms पर जाएं और “NoStatePrefetch” खोजें. NoState Prefetch के तीन अलग-अलग हिस्टोग्राम होते हैं. हर हिस्टोग्राम, NoState Prefetch के इस्तेमाल के एक उदाहरण के लिए होता है:

  • “NoStatePrefetch” (प्रीरेंडर रिसॉर्स के सुझावों के इस्तेमाल के आंकड़े)
  • “gws_NoStatePrefetch” (Google पर खोज नतीजों के पेज के इस्तेमाल के आंकड़े)
  • “omnibox_NoStatePrefetch” (Chrome के पता बार के इस्तेमाल से जुड़े आंकड़े)