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

Katie Hempenius
Katie Hempenius

वीडियो का शुरुआती हिस्सा

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

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

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

वजह

NoState प्रीफ़ेच की सुविधा शुरू करने की दो मुख्य वजहें ये थीं:

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

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

वहीं दूसरी ओर, प्रीरेंडरिंग करने की सुविधा से आम तौर पर 10 करोड़ मेमोरी का इस्तेमाल होता है और मेमोरी के इस्तेमाल को 15 करोड़ रुपये तक सीमित किया जाता है. मेमोरी का इस्तेमाल ज़्यादा होने की वजह से, यह 512 एमबी से कम रैम वाले डिवाइसों के लिए सही नहीं है. इस वजह से, Chrome कम सुविधाओं वाले डिवाइसों पर प्रीरेंडरिंग नहीं करता. इसके बजाय, Chrome प्रीकनेक्ट करेगा.

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

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

लागू करने का तरीका

नीचे दिए गए चरणों में जानें कि NoState Prefetch कैसे काम करता है.

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

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

  2. NoState प्रीफ़ेच के लिए रेंडर करने के लिए, एक नया और खास रेंडरर बनाया गया है.

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

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

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

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

    Chrome में “IDLE” नेट प्राथमिकता, सबसे कम संभावित प्राथमिकता है.

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

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

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

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

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

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

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

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

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

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

वेब Analytics पर प्रभाव

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

उपयोगकर्ता को पेज दिखाए जाने पर, क्लाइंट-साइड ऐनलिटिक्स स्क्रिप्ट एक पेज व्यू रजिस्टर करती है. ये स्क्रिप्ट JavaScript के एक्ज़ीक्यूशन पर निर्भर करती हैं और NoState Prefetch किसी JavaScript को एक्ज़ीक्यूट नहीं करता.

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

इसे देखें

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

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

आप Chrome के इंटरनल का इस्तेमाल यह देखने के लिए कर सकते हैं कि आप NoStatePrefetch का इस्तेमाल कैसे करते हैं.

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

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

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